我有一个数据类型,我可以实例化该类型的变量。像这样:
FetchAddr faddr(VirtualMemoryAddress( 0x0a ));
FetchAdr的定义是:
struct FetchAddr {
VirtualMemoryAddress theAddress;
FetchAddr(VirtualMemoryAddress anAddress)
: theAddress(anAddress)
{ }
};
现在我有一个类,faddr是一个私有(private)(或公共(public))变量
class FLEXUS_COMPONENT(BPred) {
static FetchAddr faddr;
public:
FLEXUS_COMPONENT_CONSTRUCTOR(BPred)
: base( FLEXUS_PASS_CONSTRUCTOR_ARGS )
{
faddr = VirtualMemoryAddress( 0x0a );
}
...
}
假设宏定义正确。
该代码编译和链接没有任何问题。但是,当我启动程序时,它说:
"undefined symbol: _ZN6nBPred14BPredComponent8faddr"
它说没有faddr的符号。
有什么想法吗?
最佳答案
声明静态成员时,还必须在某个地方定义它,例如在.cpp文件中。还要记住链接到该文件。
问题编号2-FetchAddr
没有默认的构造函数。
如果需要将faddr
作为类的静态成员,则还需要在定义它时给它一个值,例如:
FetchAddr FLEXUS_COMPONENT(BPred)::faddr(VirtualMemoryAddress( 0x0a ));
这将创建一个由所有
faddr
对象共享的FLEXUS_COMPONENT(BPred)
。如果您希望每个对象都有其自己的
faddr
变量拷贝,则可以使其成为非静态对象并在构造函数中对其进行初始化:class FLEXUS_COMPONENT(BPred) {
FetchAddr faddr;
public:
FLEXUS_COMPONENT_CONSTRUCTOR(BPred)
: base( FLEXUS_PASS_CONSTRUCTOR_ARGS ),
faddr(VirtualMemoryAddress( 0x0a ))
{ }
// ...
};