2014-09-08 5 views
-2

Я не знаю, почему это требование для копии Constructer в классе Node дает эту ошибку, хотя конструктор State State copy работает в основном, посмотрите.Нет соответствующей функции call to State :: State (State)

Примечание: мой компилятор - версия gcc 4.8.2.

class Node 
{ 
public: 
    Node(Node& rhs); 
    Node(State state); 

private: 
    State mystate; 
    Node* next; // pointer to the next node 
}; 



Node::Node(Node& rhs) : mystate(rhs.getState()), next(NULL) 
{ 
    // the error here how ever I could call 
    // State cpy constructer in main or other places ! 
} 

Node:: Node(State state): mystate(state) , next(NULL) 
{ 
    //.... 
} 



class State 
{ 
public: 
    State(State& RHS); 
    void operator = (State& RHS); 

private: 
    State* parent; 


    State::State(State& RHS) : parent(NUL) 
    { 
    ..... 
    } 

    void State::operator = (State& RHS) 
    { 
    } 

}; 



int main() 
{ 
    State x; 
    State m = x; // here State cpy constructer called successfuly 
    return 0; 
} 
+0

Не используйте символы TAB в представлении кода разметки! Исправьте остальные изменения самостоятельно (слишком устало сейчас). –

+0

Определение класса Node не должно даже компилироваться, поскольку оно использует необъявленный идентификатор 'State'. Чтобы исправить это, сначала нужно определить «Состояние» (не просто объявленное). –

ответ

1

Обратите внимание, что компилятор должен видеть декларацию перед тем используется конструктор. Тем не менее, вы объявляете State класс после класса Node. К тому времени, когда компилятор достигнет main(), он увидел копию ctor, поэтому он не будет жаловаться.

Один из способов исправить это, чтобы переместить объявление State перед объявлением Node.

Лучшее решение состоит в том, чтобы переместить объявления классов в файл .h и сохранить определения своих функций в файле .cpp. Просто #include файл .h в верхней части файла .cpp, чтобы все объявления были видны во всем файле .h.

Как правило, в больших проектах вы хотите упорядочить код в файлах .h и .cpp, чтобы управлять декларациями и определениями и зависимостями между ними.

+0

каждый класс в заголовке файла bro –

+0

@AbuGaseem Это, безусловно, один из способов организовать ваш код, но не требуется. Это не Java. –

+0

, так что решение ..., мой код очерчен в моем проекте –

Смежные вопросы