2013-04-10 2 views
2

Хорошо, я знаю, что есть миллионы вариантов этой конкретной проблемы, и я попытался (отчаянно) пройти через все их и посмотреть, применимы ли они, но безрезультатно.ISO запрещает объявление «идентификатора» без типа.

В настоящее время я пытаюсь объявить deque в файле заголовка, и проклятая вещь не позволит мне из-за упомянутой ошибки. То же самое происходит со мной во многих моих проектах, и я думаю, что это просто что-то основное, что мне не хватает в синтаксисе класса C++.

main.cpp

#include <iostream> 
#include <fstream> 
#include <string> 
#include <deque> 
#include "Card.h" 
#include "random.h" 

using namespace std; 

void   createloop(); 
int    get_option(); 
deque <Card> make_new_deck(); 
deque <Card> load_new_deck(); 

int main() 
{ 
    createloop(); 
    return 0; 
} 

Я havn't показал оставшуюся часть файла ради ясностей, и им довольно уверенно оно не проблема. Ошибка возникает в Card.h:

Card.h

#ifndef CARD_H 
#define CARD_H 

class Card 
{ 
    public: 
     Card(); 

     deque<string> param_name_deque; 
     deque<double> param_value_deque; 
     virtual ~Card(); 
    protected: 
    private: 
}; 

#endif // CARD_H 

card.cpp

#include "Card.h" 


Card::Card() 
{ 
    //ctor 
} 

Card::~Card() 
{ 
    //dtor 
} 

всем, кто может помочь - спасибо заранее! Я буду очень рад, если пойму, что здесь неправильно!

ответ

6

Вы должны включать как зЬй :: дека и зЬй :: строка в файле заголовка card.h

#include <string> 
#include <deque> 

Между тем,

deque<string> param_name_deque; 
deque<double> param_value_deque; 

должен быть

std::deque<std::string> param_name_deque; 
std::deque<double> param_value_deque; 
+0

ahhhh забыл написать «using namespace std»! Полностью забыл, что вам нужно было определить ваше пространство имен в файлах haeder - ошеломляюще глупо от меня. –

+0

@OwenMcConnell - не писать 'using namespace std;' правильно. То, что вы забыли, состоит в том, чтобы квалифицировать имена с помощью 'std ::'. Не входите в привычку взрывать все в глобальное пространство имен; есть веские причины иметь эти вещи в своем собственном пространстве имен. –

3

Вам нужно указать namespace в card.h, когда вы объявите param_name_deque и param_value_deque:

std::deque<std::string> param_name_deque; 
std::deque<double> param_value_deque; 

и включают в себя собственные заголовки:

#include <string> 
#include <deque> 

Я хотел бы избежать using namespace std, это может показаться удобным, но это в конечном счете вызвать проблемы.

+0

Хорошо спасибо - я стараюсь воздержаться от использования пространства имен std с этого момента. –

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