内联析构函数的未定义引用

时间:2013-10-31 04:00:01

标签: c++

我有一个类,我内联构造函数和析构函数,我也有一个静态方法用于该类。我在内联析构函数中调用了静态方法,但我对该静态方法有一个链接器错误未定义的引用。我很确定它已经编译并与对象链接。这是代码,

// CFoo.h
namespace barname {
class CFoo
{
public:
    CFoo();
    ~CFoo();

    static void fooMethod();
};

inline CFoo::CFoo()
{
}

inline CFoo::~CFoo()
{
    fooMethod();
}
}

// SomeOtherSource.cpp
namespace barname
{
    void CFoo::fooMethod()
    {
    }
}

看起来代码很好并且正在编译。

2 个答案:

答案 0 :(得分:1)

以下是代码

的略微修改的工作版本

Coliru example

#include <iostream>
#include <string>
#include <vector>

namespace barname 
{
    class CFoo
    {
    public:
        CFoo();
        ~CFoo();

        static void fooMethod();
    };

    inline CFoo::CFoo()
    {
    }

    inline CFoo::~CFoo()
    {
        fooMethod();
    }

    void CFoo::fooMethod()
    {
        std::cout << "in fooMethod" << std::endl;
    }
}


int main()
{
    barname::CFoo *f = new barname::CFoo();
    delete f;
}

答案 1 :(得分:1)

#ifndef con001_CFoo_h
#define con001_CFoo_h

namespace barname {
class CFoo
{
public:
    CFoo();
    ~CFoo();


    static void fooMethod();
};
inline CFoo::CFoo()
{

}

inline CFoo::~CFoo()
{

}

}

#endif

在其他档案中

#include "CFoo.h"
namespace barname
{
void CFoo::fooMethod()
{
}
}

在XCode 4.6中编译好了