2016-03-21 4 views
-3

У меня возникла проблема с объявлением структуры. Любая помощь будет оценена по достоинству. Код ниже.struct не называет тип

//in 8puzz.h 
    #include string 
    using namespace std; 

    struct state{ 
    state(); 
    int cval; 
    string board; 
    state* parent; 
    state* previous; 
    state* next; 
    }; 

    state starter; 
    state* open; 
    state* closed; 
    string start; 

    //in 8puzz.cpp 
    #include "8puzz.h" 
    using namespace std; 

    state::state(){ 
    board=""; 
    cval=0; 
    parent=NULL; 
    previous=NULL; 
    next=NULL; 
    }; 

    //in main.cpp 
    #include "8puzz.cpp" 
    using namespace std; 

    starter.cval=Heuristic(start); 
    open= &starter; 
    closed= &starter; 

    //end code 

Эвристический() - это функция, которая берет строку и возвращает int. Поставит, если потребуется, но я считаю, что это не имеет значения; заменяя его на int, не меняет результат.

Ошибка, которую я получаю, - «стартер не называет тип». То же самое для «открытого» и «закрытого». Я видел другие вопросы об этой ошибке, но все они предназначены для структуры внутри класса, и кажется, что решение всегда связано с квалификацией имен классов и структур. Я не думаю, что это может быть проблемой здесь, поскольку структура объявляется независимо. Я пробовал много перестановок; объявляя все внутри 8puzz.cpp, с конструктором, без конструктора, конструктором в начале объявления структуры, конструктором в конце, конструктором, определенным с определением, конструктором, определенным отдельно. Я включил эту версию, потому что, основываясь на всем, что я читал, я считаю, что она соответствует лучшим практикам, но каждая версия дала мне ту же ошибку. Любая помощь будет большой. Заранее спасибо!

+0

извините, да, все ниже «using namespace std;» в main.cpp находится внутри основной функции. – IAntoniazzi

+0

Попробуйте прокомментировать ** state() ** structs не может содержать функции или методы. –

+0

Хорошо, просто попробовал это. Без изменений. – IAntoniazzi

ответ

1

Вы забыли поставить код main.cpp внутри функции . Эту функцию следует называть int main().

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

Кроме того, в вашем файле main.cpp содержится 8puzz.cpp. Он должен содержать 8puzz.h.

+0

Извините, у меня есть внутри функции int main(), я просто случайно оставил ее, когда я воссоздавал код здесь. Все ниже "using namespace std;" в main.cpp находится основная функция. – IAntoniazzi

+1

@IAntoniazzi: Хорошо, вместо того, чтобы тратить время на все, почему бы вам не разместить свой _actual_ [testcase] (http://stackoverflow.com/help/mcve)? –

+0

Я пытался опубликовать минимальное количество кода. Этот фрагмент находится в середине довольно большой программы, и я забыл захватить «int main() {» с самого начала и «return 0;») с конца. Это честная ошибка, и я приношу извинения за то, что потратил ваше время. Это буквально все, что я забыл, остальная часть программы не имеет отношения к моему вопросу. – IAntoniazzi