2014-02-21 84 views
2

我的代码在这里这个片断:类/成员函数错误

class physics_vector 
{ 
public: 
    double direction, magnitude; 
    int dir_mag(double dir, double mag) :direction(dir), 
     magnitude(dir) {return 0; }; 
}; 

int dir_mag(double dir, double mag) 
{ 
    cout << "Direction: " << dir << '\n'; 
    cout << "Magnitude: " << mag << '\n'; 
    return 0; 
} 

每当我尝试编译我的错误,

13:39: error: only constructors take member initializers 

任何帮助吗?

+0

错误非常明显。您正在使用初始化程序列表(以冒号开头的内容),而不是*构造函数。另外,为什么你有一个名为dir_mag的方法和一个名为dir_mag的免费函数? – Borgleader

+0

@Borgleader,为什么初始化列表是不允许的除了构造函数?我知道我迟到了,但我恐怕会为同样的解决方案打开一个新的线程。 –

+0

因为国际标准(上帝保存委员会)这样说 –

回答

3

此功能:

int dir_mag(double dir, double mag) :direction(dir), magnitude(dir) 
{return 0; }; 

是使用初始化列表(:direction(dir), magnitude(dir))和唯一允许的构造函数。如果您计划将其作为构造函数,则您的类应如下所示:

class physics_vector 
{ 
public: 
    double direction, magnitude; 
    physics_vector(double dir, double mag) :direction(dir), 
     magnitude(dir) {}; 
}; 

然后编译。请注意,您不允许从构造函数返回值,也没有返回类型。

+0

构造函数没有返回类型... – Borgleader

+0

是的,谢谢 - 将更新。 –

0

您不能在函数中使用初始化器列表。它不是C++中的有效操作。您只能使用构造函数来使用“初始化程序”列表。 编译器给出非常明确的错误。