我正在尝试为自己的理解重新创建矢量类。最近我在尝试编译此代码时遇到了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");
}
如果您需要更多信息,请不要犹豫。
答案 0 :(得分:1)
在线搜索时,我发现您的header file ...包含以下行:
// disgusting macro hack to get a range checked vector:
#define vector Vector
我不知道你为什么使用它,但这是你问题的原因。
要使用矢量,您需要做的只是#include <vector>
要添加一些说明,头文件会创建一个名为Vector
的矢量类,然后#define
会确保vector
的所有初始化实际上都会引用此Vector
类。
重命名你的课程将为你解决这个问题。
作为旁注,该头文件很可怕,使用时要小心。
答案 1 :(得分:1)
我假设this是你所包含的std_lib_facilities.h
。该文件包含一个宏
// disgusting macro hack to get a range checked vector:
#define vector Vector
这会导致代码中vector
的所有后续出现都被Vector
替换。因此,当您声明class vector
时,它会更改为class Vector
,并且由于您包含的标头已经声明了名为Vector
的模板类型,因此您可能会收到重新定义的符号错误。另外,在main声明vector v(5);
时,它会更改为Vector v(5)
,并且由于Vector
中声明的原始std_lib_facilities.h
类需要模板参数,因此会出现错误在您的问题中发布有关缺少模板参数的消息。
要解决这个问题,您可以将您的课程重命名为vector
之外的其他内容,然后在#undef vector
之后添加std_lib_facilities.h
,或者根本不能包含该标题{ {1}}因为您使用的标准库的唯一部分是#include <iostream>
。