Ctor не допускается тип возврата

Код:

struct B
{
    int* a;
    B(int value):a(new int(value))
    {   }
    B():a(nullptr){}
    B(const B&);
}

B::B(const B& pattern)
{

}

Я получаю err msg:
'Ошибка 1 ошибка C2533:' B:: {ctor} ': конструкторам не разрешен тип возврата'

Любая идея, почему?
Постскриптум Я использую VS 2010RC

Ответ 1

Вам не хватает точки с запятой после определения struct.


Ошибка правильная, конструкторы не имеют типа возврата. Поскольку вам не хватает точки с запятой, это полное определение структуры рассматривается как возвращаемый тип для функции, как в:

// vvv return type vvv
struct { /* stuff */ } foo(void)
{
}

Добавьте точку с запятой:

struct B
{
    int* a;
    B(int value):a(new int(value))
    {   }
    B():a(nullptr){}
    B(const B&);
}; // end class definition

// ah, no return type
B::B(const B& pattern)
{

}

Ответ 2

Вам нужен лучший компилятор. С g++:

a.cpp:1: error: new types may not be defined in a return type
a.cpp:1: note: (perhaps a semicolon is missing after the definition of 'B')
a.cpp:5: error: return type specification for constructor invalid

Точка с запятой необходима, поскольку она завершает возможный список экземпляров структуры:

struct B {
...
} x, y, z;

Создает три экземпляра B, называемых x, y и z. Это часть наследия С++ C и все равно будет присутствовать в С++ 0x.