Метод подчеркивания в Visual Studio при возврате объекта - PullRequest
0 голосов
/ 30 октября 2011

Я использую Visual Studio 2010 Ultimate и хочу создать класс для чтения файлов .ini в C ++.Это не сложно для меня, но метод визуального подчеркивания, когда он возвращает ссылку на объект, и сообщение об ошибке не ясно для меня, поэтому мне нужна помощь.

У меня есть два класса.Один, Tokenizer, который читает файлы .ini, а второй, Token, который представляет один токен, например [Somethink].

В Tokenizer я создал метод для добавления новых токенов в список std :: list при их обнаружении.в INI-файле.

Token Tokenizer::addToken(string name){
    Token newToken(name);
    data.push_back(newToken);
    return newToken;
}

Мне нужна эта ссылка, чтобы добавить пары ключ-> значение к нему позже.Это конструктор токена:

Token::Token(string tokenName){
    name = tokenName;
}

И все должно быть в порядке, но это не так.Visual Studio подчеркивает слово addToken в приведенном выше коде, говоря, что:

Ошибка: объявление несовместимо с «error-type> Tokenizer :: addToken (std :: string name)".

Но декларация

Token Tokenizer::addToken(string name); 

, и класс Token также определен, поэтому он не имеет смысла для меня.Что интересно, когда я меняю тип возвращаемого значения на VOID и удаляю инструкцию возврата, тогда все в порядке.

Пожалуйста, помогите.Это мой первый контакт со ссылками и объектным программированием на C ++.

Ответы [ 2 ]

0 голосов
/ 30 октября 2011

Редактировать Оказывается, это не было проблемой в конце концов - просто могло бы быть.В следующий раз предпочитайте публиковать минимальный рабочий пример из исходного кода, а не только некоторые выбранные кавычки.

Это было бы проще, если бы вы показывали больше кода.Используя мои психические отладочные способности, я собираюсь догадаться, что Token - это вложенный класс / структура.То есть вам нужно определить его как

Tokenizer::Token Tokenizer::addToken(string name){
     Token newToken(name);
     data.push_back(newToken);
     return newToken;
}

Я угадал квалификацию пространства имен как Tokenizer :: Token (но это может быть что-то другое)

Примечание также, что не необходимо для полной квалификации вложенных типов (если они были бы локально видимы из-за использования Tokenizer) для

  • параметров метода
  • тело метода

Только тип возврата требует полной квалификации, IIRC

0 голосов
/ 30 октября 2011

Возможно, вы объявили метод в классе Token как

class Tokenizer
{
  ...
  void addToken(string);
  ...
}

Вам необходимо изменить это, чтобы оно соответствовало вашей фактической предполагаемой подписи.

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