2014-11-05 5 views
0

У меня есть следующий код и вы хотите указать значение по умолчанию для param3. Я пробовал различные попытки, и ошибка msg компилятора, похоже, говорит, что в инициализации класса non-int не разрешено. Является ли это плохой практикой и почему? Какой лучший подход с точки зрения ОО?
благодаряУстановить значение по умолчанию для ввода структуры функции элемента класса

struct MyStruct 
{ 
    int a; 
    int b; 
}; 
class myClass { 
    public: 
     void init(int param1 = 0, int param2 = 0, MyStruct param3); 
} 
+1

Если у вас есть доступ к C++ 11, я считаю, что вы можете использовать любой ' constexpr' в качестве значения параметра по умолчанию. – cdhowie

+0

Покажите нам, как вы пытались дать аргумент по умолчанию. – 0x499602D2

+0

void init (int param1 = 0, int param2 = 0, MyStruct param3 = {0,0}); – elgnoh

ответ

1

Вы можете добавить конструктор и конструктор MyStruct по умолчанию и сделать постоянное значение по умолчанию, как это:

struct MyStruct { 
    int a; 
    int b; 
    MyStruct(int x, int y):a(x), b(y) {} // Constrctor. 
    MyStruct():a(0), b(0) {}    // Default constrctor. 
}; 

const MyStruct default_(3, 4);   // for instance here by default a == 3 and b == 4 

class myClass { 
    public: 
     void init(int param1 = 0, int param2 = 0, MyStruct param3 = default_); 
}; 
+0

Это похоже на работу, если я использую const MyStruct default_ = {3,4}; FYI, я не контролирую MyStruct, не могу ли добавить конструктор. Люди, которые внедрили MyStruct, использовали строгую C-структуру. – elgnoh

0

Следующая будет работать (по крайней мере, с C++ 11):

void init(int param1 = 0, int param2 = 0, MyStruct param3 = MyStruct{ 2, 3 }); 
0

Вероятно, самый простой и ясный способ решить проблему, как это было бы сделать что-то вроде этого :

class myClass { 
    public: 
    void init(int p1 = 0, int p2 = 0) 
    { 
     MyStruct s; //initialize this to whatever default values 
     init(p1, p2, s); 
    } 
    void init(int p1, int p2, MyStruct p3); 
} 
0

Это будет работать в C++ 0x.

struct MyStruct 
{ 
    int a; 
    int b; 
}; 

function foo(int a, structure s = structure{10,20}) 
{ 
    //Code 
} 
Смежные вопросы