Как вызвать функцию-член в функции-члене вне класса?

#c #c 11

#c #c 11

Вопрос:

Мой класс определен в моем заголовочном файле, а в моем .cpp-файле у меня есть:

 bool Card::foo(const std::string amp;trump) const {...}

bool Card::bar(const std::string amp;trump) const {
     bool oof = foo(const std::string amp;trump); 
}
  

По какой-то причине это не работает. XCode выдает ошибку: ожидаемое выражение. То же самое происходит, когда я пытаюсь:

 bool oof = Card::foo(const std::string amp;trump);
bool oof = foo(const std::string amp;trump) const;
  

Комментарии:

1. bool oof = foo(trump); Вы делаете это слишком сложным.

2. Почему const std::string не включен?

3. Почему они должны быть?

4. Вам нужно, чтобы амперсанд в объявлении функции передавался по ссылке — не на каждом сайте вызова.

5. @Goldname По той же причине вы можете писать printf("%d", 5); и нет printf(const char *"%d", int 5); . Типы никогда не включаются при вызове функции.

Ответ №1:

Проверьте

 bool Card::foo(const std::string amp;trump) const {...}

bool Card::bar(const std::string amp;trump) const {
     bool oof = foo(trump); 
}
  

Любое из приведенных ниже выражений:

 bool oof = foo(const std::string amp;trump);
bool oof = Card::foo(const std::string amp;trump);
bool oof = foo(const std::string amp;trump) const;
  

переопределил бы trump , поскольку

 bool Card::bar(const std::string amp;trump) const 
  

уже определил его.

Ответ №2:

Информация о типе не требуется / не допускается при вызове foo (часть const std::string), потому что язык не работает таким образом. Это потребуется для объявления функции, но не указывайте тип при ее вызове. Посмотрите на пример Игоря.