错误:在'<'标记之前预期')'

时间:2015-01-05 07:58:19

标签: c++ compiler-errors

我试图在书后学习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 width GNU GCC编译器,并且没有激活额外的编译器标志。我已经尝试检查&#34;让g ++遵循C ++ 0x ISO C ++语言标准[-std = c ++ 0x]&#34;在Code :: Blocks中,但是错误仍然存​​在,而且还有三个新的错误。

1 个答案:

答案 0 :(得分:1)

您也缺少#include <initializer_list> lst.size()代替lst.sizelst.end()代替ls.end()。 请记住在编译时启用c ++ 11。