【问题标题】:error: expected ‘)’ before ‘<’ token错误:在“<”标记之前应为“)”
【发布时间】: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 &lt;initializer_list&gt;,但错误仍然存​​在。我正在使用 GNC GCC 编译器,没有在 Code::Blocks 中激活额外的编译器标志。

标签: c++ compiler-errors


【解决方案1】:

你还缺少#include &lt;initializer_list&gt; lst.size() 而不是 lst.sizelst.end() 而不是ls.end()。 记得在编译时启用 c++11。

【讨论】:

  • 谢谢。我已编辑代码以使用 lst.size() 和拼写错误。我还添加了#include &lt;initializer_list&gt;。错误仍然存​​在 =(
  • 您是否在编译标志中添加了 -std=c++0x 以启用 c++11 功能?
  • 我刚刚检查了一个选项,上面写着“让 g++ 遵循 comming C++0x ISO C++ 语言标准 [-std=c++0x]”。现在我在开篇帖子中发布了旧的 2 个错误加上 3 个新错误 =/
  • /media/proyectos/c/Test/Vector.h|6|error: expected ‘)’ before ‘&lt;’ token /media/proyectos/c/Test/Vector.cpp|22|error: el prototipo para ‘Vector::Vector(std::initializer_list&lt;double&gt;)’ no coincide con ningún otro en la clase ‘Vector’ /media/proyectos/c/Test/Vector.h|1|error: los candidatos son: constexpr Vector::Vector(Vector&amp;&amp;) /media/proyectos/c/Test/Vector.h|1|error: constexpr Vector::Vector(const Vector&amp;) /media/proyectos/c/Test/Vector.cpp|7|error: Vector::Vector(int)
  • 我已经关闭并再次打开 Code::Blocks,它现在可以工作了 (o_O)。非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2012-10-05
  • 2014-01-16
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多