#include <vector>
#include <string>
using namespace std;
vector<vector<string> > Foo()
{
vector<vector<string> > vs(15, vector<string>(15, "test"));
return vs;
}
int main()
{
vector<vector<string> > vvs = Foo();
return 0;
}
MinGW ругается сам на себя при использовании многомерного контейнера
При компиляции следующего кода:
Код:
компилятор выдает варнинг:
C:\Program Files\CodeBlocks\MINGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\stl_uninitialized.h|82|warning: '__cur' might be used uninitialized in this function|
То есть ругается на собственный заголовочный файл. Кто-нибудь может сказать, что ему не нравится?
Добавлено позже:
Если поменять код на следующий:
Код:
#include <vector>
#include <string>
using namespace std;
void Foo(vector<vector<string> > &vvs)
{
vvs.resize(15, vector<string>(15, "test"));
}
int main()
{
vector<vector<string> > vvs;
Foo(vvs);
return 0;
}
#include <string>
using namespace std;
void Foo(vector<vector<string> > &vvs)
{
vvs.resize(15, vector<string>(15, "test"));
}
int main()
{
vector<vector<string> > vvs;
Foo(vvs);
return 0;
}
то выдается 12 подобных варнингов...
Проверил на других компиляторах (Microsoft Visual C++ 2008 Express Edition, и альтернативная сборка TDM/MinGW) - такого предупреждения не выдается. Похоже, это некачественная реализация STL в текущей версии MinGW...
Эт я чего не понял или MinGW такой?
Цитата: Gigahard
Извиняюсь, что не совсем по теме... Но недавно вот решил протестить код на MinGW и столкнулся с тем, что он не хавает предварительные объявления классов.
Эт я чего не понял или MinGW такой?
Эт я чего не понял или MinGW такой?
Сейчас под рукой нет книг, чтобы проверить, как правильно должно быть. Но следующий код работает:
Код:
#include <iostream>
class ClassA;
class ClassB
{
public:
ClassA* a;
ClassB(ClassA* aa):a(aa){}
};
class ClassA
{
public:
void Print(){std::cout << "ClassA";}
};
int main()
{
ClassB b(new ClassA);
b.a->Print();
delete b.a;
return 0;
}
class ClassA;
class ClassB
{
public:
ClassA* a;
ClassB(ClassA* aa):a(aa){}
};
class ClassA
{
public:
void Print(){std::cout << "ClassA";}
};
int main()
{
ClassB b(new ClassA);
b.a->Print();
delete b.a;
return 0;
}
Если использовать не указатель, а сам объект, то компилятор ругается.