【发布时间】:2013-10-31 21:14:01
【问题描述】:
为了我自己的理解,我正在尝试重新创建矢量类。我最近在尝试编译此代码时遇到了 Visual Studio 2013 的问题。 每个 'vector' 关键字都出现错误,其中指出:
我不知道这是我的类定义中的范围错误还是其他原因。我没有玩过任何设置。
#include "../../../std_lib_facilities.h"
class vector{
int sz;
double* elem; //pointer to the first element (of type double)
public:
vector(int s) :sz(s), //constructor - allocates s doubles , :size(s) is a 'initilization list'
elem(new double[s])
{
for (int i = 0; i < s; i++)
elem[i] = 0; //initialize elements
}
int size() const
{
return sz;
}
//read
double get(int n)
{
return elem[n];
}
//write
void set(int n, double v)
{
elem[n] = v;
}
//Every class that owns a resource needs a destructor
~vector() //destructor
{
delete[] elem; // free memory
}
};
int main(int argc)
{
vector v(5);
for (int i = 0; i < v.size(); i++){
v.set(i, i);
cout << "v[" << i << "]==" << v.get(i) << '\n';
}
system("PAUSE");
}
如果您需要更多信息,请随时询问。
【问题讨论】:
-
添加#undef 向量有帮助吗?
-
头文件里有什么?
-
我建议您将向量称为其他名称(例如
myvector),或者不要包含定义该宏的标题。如果您无法避免该标题并且不想重命名您的课程,请尝试#undef,如已建议的那样。 Microsoft 不应该将宏用于受命名空间保护的东西。这真的很低。 -
@paddy - 是 Bjarne Stroustrup 编写了该宏,而不是 Microsoft。你可能会因为在这里称 Bjarne “低”而惹上麻烦。不是微软,这很受欢迎。
-
嗯,我受到 Bjarne Stroustrup 认为它“恶心”这一事实的保护,这比“低”更糟糕。 =) 我很想知道为什么需要宏。
标签: c++ visual-studio-2012 macros compilation