【发布时间】:2015-01-05 07:58:19
【问题描述】:
我正在尝试通过一本书来学习 C++。我使用 std::initializer_list 编写了这个类定义,以便用元素列表初始化向量。 Vector.h 文件看起来是这样的:
class Vector
{
public:
Vector(int s);
~Vector();
Vector(std::initializer_list<double>);
void push_back(double);
double& operator[](int i);
int size();
private:
double* elem;
int sz;
};
当我尝试编译时,我在第 6 行(initializer_list one)中有此错误消息:
error: expected ‘)’ before ‘<’ token
我还添加了这段代码来实现 Vector 构造函数。 Vector.cpp 看起来是这样的
#include "Vector.h"
#include <stdexcept>
using namespace std;
Vector::Vector(int s)
{
if(s < 0)
{
throw length_error("Vector::operator[]");
}
elem = new double[s];
sz = s;
}
Vector::~Vector()
{
delete[] elem;
}
Vector::Vector(std::initializer_list<double> lst)
{
elem = new double[lst.size()];
sz = static_cast<int>(lst.size());
copy(lst.begin(), lst.end(), elem);
}
double& Vector::operator[](int i)
{
if(i<0 || i>=size())
{
throw out_of_range("Vector::operator[]");
}
return elem[i];
}
int Vector::size()
{
return sz;
}
但编译也失败并显示此消息:
error: expected constructor, destructor, or type conversion before ‘(’ token
我正在使用 Code::Blocks 宽度的 GNU GCC 编译器,并且没有激活额外的编译器标志。我尝试在 Code::Blocks 中检查“让 g++ 遵循即将发布的 C++0x ISO C++ 语言标准 [-std=c++0x]”,但仍然存在错误,并且出现了三个新错误。
【问题讨论】:
-
您确实包含
std::initilizer_list的正确头文件? -
lst.size()然后下一行lst.size,是哪一个? -
请贴出完整代码,以便我们重现。
-
同时添加你的编译器版本和你传入的标志。一些编译器还不支持
std::initializer_list,或者需要标志来启用支持。 -
我尝试添加
#include <initializer_list>,但错误仍然存在。我正在使用 GNC GCC 编译器,没有在 Code::Blocks 中激活额外的编译器标志。
标签: c++ compiler-errors