#include <iostream>
#include <stdlib.h>
using namespace std;
class Rectangle {
int width, height;
public:
Rectangle(int x, int y) : width(x), height(y) {}
int area(void) { return width * height; }
};
int main() {
Rectangle obj (3, 4);
Rectangle * foo, * bar, * baz;
foo = &obj;
bar = new Rectangle (5, 6);
baz = new Rectangle[2] { {2,5}, {3,6} };
cout << "obj's area: " << obj.area() << '\n';
cout << "*foo's area: " << foo->area() << '\n';
cout << "*bar's area: " << bar->area() << '\n';
cout << "baz[0]'s area:" << baz[0].area() << '\n';
cout << "baz[1]'s area:" << baz[1].area() << '\n';
delete bar;
delete[] baz;
system("PAUSE");
return 0;
}
此代码在代码块中执行,但在Visual Studio中,没有适当的默认构造函数。
我尝试在这里寻找类似的东西,但我找不到任何东西。
答案 0 :(得分:1)
operator new
和operator new[]
之间存在差异,以及将参数传递给新构建元素的构造函数的方式。
for ex :(从维基百科中获取的略有修改版本)
T *p = new T(42); //New T inited to T(42). (same syntax as constructors)
T *parray = new T[42]; //An array of 42 T, inited with T()
T *cpp11array = new T[3] {1, 2, 3}; //3 Ts, inited to T(1), T(2) and T(3) (C++11 only)
您的Visual Studio 似乎不符合 C ++ 11标准。希望应该有一个选项来启用C ++ 11 std,或者你可能想安装最新的编译器。
作为旁注,您应该更喜欢STL容器(例如:std :: array或std :: vector而不是裸指针数组)。
vector<Rectangle> baz;
baz.push_back( Rectangle(2, 5) );
baz.push_back( Rectangle(3, 6) );
答案 1 :(得分:0)
这是VS2013中的非标准行为,我们可以将其称为在以后版本中修复的错误。
gcc-4.8中也是runs。