c ++ 11 — конструктор делегата C ++ 11 с новым параметром экземпляра?

Возникла проблема с получением этого синтаксиса для компиляции с использованием компилятора CTP C ++ для Visual Studio от ноября 2012 года … Просто хотелось убедиться, что я не пропустил что-то очевидное.

Спасибо!

РЕДАКТИРОВАТЬ: Удален заголовок, чтобы сделать его еще проще.

class Location
{
public:
Location();
};

class Shape
{
public:
Shape();
Shape(Location location);
};// Doing this by pointer works ...
// Shape::Shape(Location* location){}
// Shape::Shape() : Shape(new Location()){}

Shape::Shape(Location location)
{
}

Shape::Shape()
: Shape(Location())
// error C2143: syntax error: missing ';' before ':'
{
// int x = 0;
// (void) x;  // Added these two lines in some cases to get it to compile.
// These two lines do nothing, but get around a compiler issue.
}

0

Решение

// .h Simplification
class Location
{
public:
Location() {}
Location(Location const& other) {}
};

class Shape
{
Shape();
Shape(Location location);
};

// How about by value or reference?
Shape::Shape(Location location)
{
}

Shape::Shape(void)
: Shape(Location()) // error C1001: An internal error has occurred in the compiler.
{
}

int main() {}

Приведенный выше код компилируется и запускается в gcc 4.7.2

Мне пришлось внести несколько изменений в ваш код, чтобы он компилировался. При упрощении вещей старайтесь компилировать упрощенный код. http://sscce.org/

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector