2013-07-07 2 views
0

У меня есть небольшая проблема с моим кодом на C++.Декларация структуры до определения

class Command { 
public: 
    virtual void start(CommandDesc userinput, Converter* convertobj) = 0; 
    virtual void help(int option) = 0; 
}; 


struct CommandDesc 
{ 
    std::string name; 
    std::string description; 
    Command* comobj; //Issue is here 
}; 

Если я определить структуру перед классом, я не буду в состоянии определить член

Command* comobj; 

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

virtual void start(CommandDesc userinput, Converter* convertobj) = 0; 

Что вы можете предложить? Есть ли способ сначала объявить структуру, чем определить ее отдельно?

ответ

7

Хорошо, если я определить структуру перед классом, я не буду в состоянии определить элемент

Command* comobj; 

Поскольку ComObj является указателем, вы можете перенаправлять объявить Command разрешить это.

Вы бы сделать это:

class Command; 

struct CommandDesc 
{ 
    std::string name; 
    std::string description; 
    Command* comobj; 
}; 

class Command { 
public: 
    virtual void start(CommandDesc userinput, Converter* convertobj) = 0; 
    virtual void help(int option) = 0; 
}; 
+0

Спасибо за решение, я буду стараться, но просто интересно, если это не был указателем, почему он потерпит неудачу? – khajvah

+1

@khajvah, когда объявляется участник, его тип должен быть полным. Указатель может указывать на неполный тип. – billz

0

Да - просто - опережающее объявление

Просто поместите

class Command; 

struct CommandDesc 
{ 

.... 

} 

class Command { 
As before 

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