未定义引用类的静态方法成员?

时间:2015-08-11 16:16:05

标签: c++

我有这个编译器错误,抱怨静态函数。我不知道这个问题是关于枚举还是实际的类

// enumeration
enum SOURCE  { file, network};
//class declaration
class A
{
public:
    static const double findValue(std::string nme);
    static const double getValue(SOURCE ds);
};

// class definition
const double A::findValue(std::string nme)
{
    ...
    ...
    return some_double;
}

const double A::getValue(SOURCE ds)
    double val;
    switch(SOURCE::ds)
    {
        case SOURCE::file:
            ......
            break;
        case SOURCE::network:
            .....
            break;
        default: 
            break;
    }
}

   // use
void myValue()
{
double det1 = A::findValue("DNS");
double det2 = A::getValue(SOURCE::file);
}

为什么我的编译器会抱怨两个静态方法未定义?

错误:

In function 'System::myValue()' : System.cpp : (.text._ZN11System8myValueEv[_ZN11.....]+0x1d): undefined reference to 'A::getValue(SOURCE)'

另一种findValue()方法的类似错误。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。首先,您定义函数A::findValue()两次。其次,在A::getValue()的正文中,您需要编写如下的开关语句:switch(ds),而不是switch(SOURCE::ds)。第三,正如@JSF指出的那样,按值返回一个const原语是不寻常的(虽然技术上是合法的),但可能不是你想要做的。

编辑:A::getValue()也需要返回一个值。