2012-11-05 43 views
0

假设你有一个文件example.h文件从内联函数

class example 
{ 
public: 
    int doStuff(); 
}; 

和文件example.cpp

#include "example.h" 
static const int data[] = {1, 2}; 

inline int doStuffImpl() 
{ 
    return data[0] + data[1]; 
} 

int example::doStuff() 
{ 
    return doStuffImpl(); 
} 

当我编译使用本地Solaris上的等效引用文件静态变量编译器,我得到一个链接器错误,它无法找到符号'数据'。我做的是无效的吗?

+1

我觉得你在这里混的Java语法?你也可以输入你在Solaris中使用的g ++版本以及它工作的其他操作系统吗?还有你指定的命令行选项? – Romaan

+1

当您删除'inline'限定符时,问题是否消失? –

+0

虽然这很有趣,但是您是否真的使用了这个代码?因为在这个简单的例子中,没有必要将'doStuffImpl()'提取到一个单独的函数中 - 你可以在'example :: doStuff()'内部完成。 – Axel

回答

4

不,它不是,它应该是

static const int data[] = {1, 2}; 
+0

两者在C++中是等价的。 – Axel

+1

@Axel可能在Java中,在C++中不,它们不是。 –

+0

请注意,'static'在这里是多余的:'const'通过内部链接创建一个文件或命名空间作用域变量链接,与'static'一样。 –