首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多态性编译问题的简单文件

具有多态性编译问题的简单文件
EN

Stack Overflow用户
提问于 2010-12-18 20:52:05
回答 5查看 967关注 0票数 0

我在编译一些非常简单的代码时遇到了问题,我不知道它有什么问题:/看一下:

代码语言:javascript
复制
class A{
public:
    virtual void func() = 0;
};

class B : public A
{
public:
    virtual void func() {};
};

int main()
{
    A* obj = new B();
    return 0;
}

这是我从g++得到的消息:

代码语言:javascript
复制
Info: resolving vtable for _cxxabiv1::__si_class_type_info by 
    linking to __imp __ZTVN10__cxxabiv120__si_class_type_infoE (auto-import) 
Info: resolving vtable for __cxxabiv1::__class_type_info by 
    linking to __imp___Z TVN10__cxxabiv117__class_type_infoE (auto-import) 
k:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: 
warning: auto-importing has been activated without 
    --enable-auto-import specified on the c ommand line. This should work 
    unless it involves constant data structures referencing symbols from 
    auto-imported DLLs
EN

回答 5

Stack Overflow用户

发布于 2010-12-18 22:09:46

你在编译方面没有任何问题,你在链接方面有问题(更准确地说,只是警告)。请参见:

代码语言:javascript
复制
d:\alqualos\pr\testpq>g++ -Wall -c main.cpp
main.cpp: In function 'int main()':
main.cpp:14:8: warning: unused variable 'obj'
d:\alqualos\pr\testpq>g++ -Wall main.o
Info: resolving vtable for __cxxabiv1::__si_class_type_info by linking to __imp_
__ZTVN10__cxxabiv120__si_class_type_infoE (auto-import)
Info: resolving vtable for __cxxabiv1::__class_type_info by linking to __imp___Z
TVN10__cxxabiv117__class_type_infoE (auto-import)
d:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: a
uto-importing has been activated without --enable-auto-import specified on the c
ommand line.
This should work unless it involves constant data structures referencing symbols
 from auto-imported DLLs.

这是MinGW的一个广泛使用的“特性”。如果您的程序需要来自标准C++库的任何内容,甚至是简单的std::cout,就会发生这种情况。在这种情况下,它与vtables有关。要摆脱它:

代码语言:javascript
复制
d:\alqualos\pr\testpq>g++ -Wall -Wl,--enable-auto-import main.o

我不知道“除非涉及引用来自自动导入的DLL的符号的常量数据结构”是什么意思。我试着用谷歌搜索了一下,但没有找到任何有用的东西。如果有人知道这到底是什么意思,什么时候可能是危险的,请在这里回复。

票数 4
EN

Stack Overflow用户

发布于 2010-12-18 20:54:24

尝试使用A * obj = new B;,但是以后也请发布错误消息。

票数 1
EN

Stack Overflow用户

发布于 2010-12-18 20:59:04

你在这里发布的代码符合C++标准的所有要求。所以问题出在编译器上,我试着用VS(Windows)和g++(Linux)编译,在这两个平台上都编译成功了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4478090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档