为什么我要在这里使用右括号?

时间:2015-06-08 18:19:41

标签: c++ gcc

我有一些我无法编​​译的代码。编译器说应该有一个结束括号,但我看不出这个或地方放置它的原因。这是我的代码:

#include "Player.h"

Player(std::string val){
    set_Name(val);
    set_Alliance("NONE");
    set_LastUpdate();
}

Player(std::string val, std::string ally){
    set_Name(val);
    set_Alliance(ally);
    set_LastUpdate();
}

我已经包含在Player.h中

这是错误:

error: expected ')' before 'val'

这是构造函数的原型:

Player(std::string);

我在linux(ubuntu)下使用GNU GCC编译器

2 个答案:

答案 0 :(得分:11)

您正在类定义之外的构造函数中缺少类名。试试这个:

Player::Player(std::string val){  // constructor outside class definition
    set_Name(val);
    set_Alliance("NONE");
    set_LastUpdate();
}

未验证的推测:使用当前代码,编译器会看到 Player(symbol1 symbol2)并将其作为创建类 Player 的对象,并且首先无法理解的是看到两个符号作为构造函数参数,并给出了一个有点误导性的错误。

答案 1 :(得分:1)

当你在类之外定义方法,构造函数,析构函数等时,记得告诉编译器这是属于类的,使用范围运算符::后面的类名和方法的名称,构造函数,析构函数等与匹配参数。

作为一个小例子:

class Phone {
    string number;
public:
    string get_num();
    void set_num(string const &num) { number = num; }
};

// Pay attention to this:
// we tell the compiler that get_num belongs to class Phone
string Phone::get_num()
{
    return number;
}

int main()
{
    Phone p;
    p.set_num("123");
    cout << p.get_num() << endl;
}