2013-02-11 5 views
-2

В C++, как я могу использовать класс, который принимает аргумент, чтобы передать его конструктор в качестве нового типа для объявления переменной в другом классе (и использовать ввод, выполненный конструктором второго класса для подачи конструктора первого класса?)Использование класса как типа для объявления переменной в другом классе

Что я хочу сделать, это что-то вроде следующего, но я не знаю, как правильно выполнить часть класса Object, и я продолжаю получать ошибки (I не хотят, чтобы получить класс объектов из класса Color)

enum color_enum {red, blue, green, black}; 
class color 
{ 
protected: 
    color_enum col; 
public: 
    color(color_enum initval) 
    { 
     col = initval; 
    } 
    string str() 
    { 
     switch (col) 
     { 
     case red: 
     return "red"; 
     case blue: 
     return "blue"; 
     case green: 
     return "green"; 
     case black: 
     return "black"; 
     default: 
     return "N/A"; 
    } 
    } 
}; 

ostream &operator<< (ostream &out, color &inst) 
{ 
    out << inst.str(); 
    return out; 
} 

class Object 
{ 
public: 
    float objvolume; 
    float objmass; 
    string objname; 
    color objcolor(initval); 
}; 
+1

класс [...] ", чтобы объявить переменную в другом классе"? Извините, я не понимаю, не могли бы вы переформулировать или привести пример? – thiton

+0

Вы либо инициализируетесь с жестко запрограммированным значением (например, 'red'), либо передаете значение конструктору' Object'; в любом случае вы должны использовать список инициализаторов. –

ответ

1

Используйте список инициализатора:

class Object { 
public: 
    Object(color_enum initval) : objcolor(initval){} 
          // ^^^^^^^^^^^^^^^^^^^ 
          //initialize objcolor with initval    
    //... 
    color objcolor; 
}; 

... 

Object o(red); //objcolor will be constructed with red as an argument 

В C++ 11, вы можете использовать в своем классе инициализации и сделать:

color objcolor{red}; 

Это работает только для значений по умолчанию, однако, не те, которые передаются в конструктор.

+0

Так что я не могу это сделать? –

+0

@MohammadSanei, вы не можете инициализировать его до значения, переданного при создании объекта без списка инициализаторов. – chris

+0

Я сделал то, что вы предложили, но я получаю сообщение об ошибке: В конструкторе «Object :: Object (color_enum)» нет подходящей функции для вызова «color :: color()» –

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