我有一些我无法编译的代码。编译器说应该有一个结束括号,但我看不出这个或地方放置它的原因。这是我的代码:
#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编译器
答案 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;
}