gpt4 book ai didi

c++ - 直接访问 VTABLE 会出现未定义的错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:41 25 4
gpt4 key购买 nike

我正在试验虚拟表和虚拟指针。为了了解更多,我做了以下事情:

  //a simple class
class X
{
public:
// fn is a simple virtual function
virtual void fn() { cout << "n = " << n << endl; }
// a member variable
int n;
};

int main()
{
// create an object (obj) of class X
X *obj = new X();
obj->n = 10;

// get the virtual table pointer of object obj
int* vptr = *(int**)obj;

__asm__("mov %eax, obj;");

// function fn is the first entry of the virtual table, so it's vptr[0]
((void (*)()) vptr[0])();

// the above should be the same as the following
//obj->fn();

return 0;
}

但是编译器给出了以下错误:

/home/OaVTND/cclnoQaK.o: In function 'main': prog.cpp:(.text.startup+0x26): undefined reference to `obj'
collect2: error: ld returned 1 exit status

我不熟悉汇编语言代码。我从其他人的代码中借用了这个。我正在使用 gcc-4.9 和 Centos 7 x64 位服务器。

最佳答案

obj 是一个局部变量,它没有链接,没有符号。只需尝试使您的对象成为全局对象即可。

关于c++ - 直接访问 VTABLE 会出现未定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259267/

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