gpt4 book ai didi

c++ - 在运行时再次出现 "undefined symbol",C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:12 25 4
gpt4 key购买 nike

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

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 ));

这将创建一个由所有 FLEXUS_COMPONENT(BPred) 对象共享的 faddr

如果您希望每个对象都有自己的 faddr 变量拷贝,您可以将其设为非静态并在构造函数中对其进行初始化:

class FLEXUS_COMPONENT(BPred)  {
  FetchAddr faddr;
   public:
     FLEXUS_COMPONENT_CONSTRUCTOR(BPred)
        : base( FLEXUS_PASS_CONSTRUCTOR_ARGS ),
faddr(VirtualMemoryAddress( 0x0a ))
     { }
   // ...
};

关于c++ - 在运行时再次出现 "undefined symbol",C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com