Почему этот код не компилируется? - PullRequest
1 голос
/ 20 июля 2011

Есть ли разница в этих кодах:

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 Ответ

7 голосов
/ 20 июля 2011

Да, разница в том, что эта строка

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

также может быть записана как

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

и является объявлением функции myDB, которая возвращает MyRecordDatabaseType.

См. C ++ самый неприятный анализ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...