我有一个数据类型,我可以实例化该类型的变量。像这样:

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 ))
     { }
   // ...
};

10-06 14:58