假设以下代码:
std::list<Test1> l1();
std::list<Test1> *pl1 = &l1;
编译器在初始化中给出错误(略微缩短): Cannot convert std::list (*)() to std::list*
当没有括号初始化l1时,一切都很好。这里有什么问题,我该如何避免呢?
答案 0 :(得分:2)
正如您所写,l1
是函数声明,不带参数并返回std::list<Test1>
。想象一下,如果名称不同,这可能更容易吞下。
std::list<Test1> make_tests(); // cleary a function declaration, no?
std::list<Test1> l1(); // also a function declaration
std::list<Test1> l1; // can't be a function declaration, no ()
std::list<Test1> l1{}; // also can't be a function declaration
解决你的意见:
std::list<Test1> l1 = std::list<Test1>();
修复了你的问题,因为只有一种方法可以解释它,这是一个变量声明,然后是赋值。
这往往特别难以接受,所以让我把它放在一个更大的程序的背景下:
std::list<Test1> make_tests(); // according to your rules, should be a variable
int main() {
std::list<Test1> tests = make_tests();
}
std::list<Test1> make_tests() {
// ... function body ...
}
或者,如果您在{}
或更晚
C++11
std::list<Test1> l1{};