为什么这段代码不能编译?

时间:2011-07-20 11:10:28

标签: c++ compiler-errors

这些代码有什么不同:

std::string dirName = argv[1];
MyRecordDatabaseType myDB(Selector<std::string>((std::string)dirName));

std::string dirName = argv[1];
MyRecordDatabaseType myDB(Selector<std::string>(dirName));

我不知道为什么第二个版本不能编译。

编译器告诉我:

error: request for member ‘createGroupWriter’ in ‘myDB’, which is of non-class type ‘main(int, char**)::MyRecordDatabaseType(Selector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)’

在线:

MyRecordDatabaseType::writer_type myWriter(myDB.createGroupWriter(groupName));

很抱歉,但我无法向您展示Selector或任何其他类的代码。

也许你没有那个可以帮助我?

1 个答案:

答案 0 :(得分:7)

是的,区别在于这一行

MyRecordDatabaseType myDB(Selector<std::string>(dirName)); 

也可以写成

MyRecordDatabaseType myDB(Selector<std::string>  dirName); 

并且是函数myDB的声明,它返回MyRecordDatabaseType

请参阅C++ most vexing parse