为了我自己的理解,我正在尝试重新创建向量类。我最近在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
复制相似问题