2013-05-26 4 views
1

У меня есть класс.C++ возвращает указатель на класс

Мне нужно создать функцию, которая возвращает указатель на член этого класса.

Мой класс выглядит следующим образом:

class clsNode 
{ 
private: 
    wstring m_grapheme; 
    vector <clsNode*> m_Daughters; 
public: 
    clsNode *getNextNode(const udtCharVec &u); 
}; 

Я попробовал следующее:

clsNode *clsNode::getNextNode(udtCharVec &u) 
{ 

    if (u.Grapheme == m_grapheme) 
    { 
     return *m_Daughters[0]; 
    } 
    else 
    { 
     return *m_Daughters[1]; 
    } 
} 

Компилятор говорит мне «ошибка c2511: clsNode: getNextNode (udtCharVec &): перегруженная функция не найдена в clsNode ".

Может кто-нибудь сказать мне, где я совершил ошибку? Спасибо!

+3

подпись в классе с аргументом const, без реализации. – EGOrecords

ответ

4

Я думаю, что вы имели в виду:

return m_Daughters[0]; 
// ^

потому что m_Daughters[0] имеет тип clsNode* и *m_Daughters[0] будет иметь тип clsNode который бы Рассогласуйте тип возвращаемого значения.

Кроме того, ваша функция подписи отличается в определении и реализации:

clsNode *getNextNode(const udtCharVec &u) 
//     ^^^^^ 
clsNode *clsNode::getNextNode(udtCharVec &u) 
+0

Спасибо. Я хотел вернуть одного из m_Daughters. Я не хочу его редактировать, мне нужно только прочитать его. Надеюсь, я мог бы объяснить это хорошо. Считаете ли вы, что мой способ хранения и извлечения его в порядке или вы сделаете это по-другому? – user2421725

+0

@ user2421725, это действительно зависит от того, что на самом деле означают эти указатели. Почему вы не можете хранить их как 'clsNode' напрямую?Зачем вам нужно динамическое распределение памяти? – Shoe

1

Метод подписи в объявлении класса является: clsNode * getNextNode (Const udtCharVec & и);

но ниже реализация: clsNode * clsNode :: getNextNode (udtCharVec & и)

Обратите внимание на "Const" в объявлении. Компилятор говорит вам, что не может найти декларацию для той, которую вы реализовали внизу.

2

У вас есть несколько ошибок здесь. Во-первых у вас есть декларация

clsNode *getNextNode(const udtCharVec &u); 

, что означает, что функция принимает аргумент в виде ссылки на константную, в то время как при определении функции у вас есть эта

clsNode *clsNode::getNextNode(udtCharVec &u) 

Подпись отличается (обратите внимание на отсутствие сопзЬ во втором).

Вторая проблема заключается в формулировках возврата:

return *m_Daughters[0]; 

тип возвращаемого значения является ссылкой, а не указатель (* есть разыменовывает указатель, который вы получаете от вектора). Чтобы исправить это, сделайте это:

return m_Daughters[0]; 
Смежные вопросы