为了我自己的理解,我正在尝试重新创建向量类。我最近在Visual 2013试图编译这段代码时遇到了一个问题。对于每个“向量”关键字,我得到一个错误,该关键字声明:

我不知道这是我的类定义中的范围错误,还是其他的错误,我没有玩过任何设置。
#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");
}如果您需要更多的信息,请不要犹豫。
发布于 2013-10-31 21:31:51
我假设这是您包含的std_lib_facilities.h。该文件包含一个宏。
// disgusting macro hack to get a range checked vector:
#define vector Vector这将导致代码中出现的所有以下vector都被Vector替换。因此,当您声明您的class vector时,它将被更改为class Vector,并且由于您所包含的标头已经声明了一个名为Vector的模板类型,您可能会得到一个重新定义的符号错误。此外,在声明vector v(5);时,主要是将其更改为Vector v(5),并且由于在std_lib_facilities.h中声明的原始Vector类需要一个模板参数,因此您将在有关缺少模板参数的问题中发布错误消息。
要解决这个问题,您可以将类重命名为vector以外的其他内容,可以在包含std_lib_facilities.h之后重新命名类,也可以在包含std_lib_facilities.h之后重新命名类,或者根本不包括标头,而只包括#include <iostream>,因为您正在使用的标准库的唯一部分是std::cout。
发布于 2013-10-31 21:22:47
在网上搜索时,我找到了你的头文件.包含以下内容的行:
// disgusting macro hack to get a range checked vector:
#define vector Vector我不知道你为什么要使用它,但这是你问题的原因。
要使用向量,只需做#include <vector>
为了增加一些澄清,头文件创建了一个名为Vector的向量类,然后#define确保vector的所有初始化都将实际引用这个Vector类。
重新命名你的班级可以帮你解决这个问题。
顺便指出,该头文件非常可怕,在使用它时要小心。
https://stackoverflow.com/questions/19716729
复制相似问题