可能重复:
g ++未定义的typeinfo引用
未定义的符号"vtable for ..."和"typeinfo for ..."?
我不能用我的班级.
class Accel {
public:
virtual void initialize(void);
virtual void measure(void);
virtual void calibrate(void);
virtual const int getFlightData(byte);
};
class Accel_ad : public Accel {
public:
Accel_ad() : Accel(){}
void initialize(void) {/*code code code...*/}
void measure(void) {/*measure code*/}
const int getFlightData(byte axis){/*getting data*/}
void calibrate(void) {
int findZero[FINDZERO];
int dataAddress;
uint8_t data[2];
for (byte calAxis = XAXIS; calAxis < ZAXIS; calAxis++) {
if (calAxis == YAXIS) dataAddress = 0x32;
if (calAxis == …Run Code Online (Sandbox Code Playgroud) 其中一些错误可以通过修改来解决
virtual void draw();
Run Code Online (Sandbox Code Playgroud)
至
virtual void draw() {};
Run Code Online (Sandbox Code Playgroud)
但是,除了虚函数之外,还有什么可能是这些错误的其他原因?什么可能是导致以下错误的原因..
/tmp/cciGEgp5.o:(.rodata._ZTI14CustomXmppPump[typeinfo for CustomXmppPump]+0x18):
undefined reference to `typeinfo for XmppPump'
Run Code Online (Sandbox Code Playgroud) 我有一个链接错误,其中链接器抱怨我的具体类的析构函数正在调用其抽象的超类析构函数,其代码缺失.
这是在XCode的Mac OS X上使用GCC 4.2.
我看到了g ++未定义的对typeinfo的引用,但它并不完全相同.
这是链接器错误消息:
Undefined symbols:
"ConnectionPool::~ConnectionPool()", referenced from:
AlwaysConnectedConnectionZPool::~AlwaysConnectedConnectionZPool()in RKConnector.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
这是抽象基类声明:
class ConnectionPool {
public:
static ConnectionPool* newPool(std::string h, short p, std::string u, std::string pw, std::string b);
virtual ~ConnectionPool() =0;
virtual int keepAlive() =0;
virtual int disconnect() =0;
virtual sql::Connection * getConnection(char *compression_scheme = NULL) =0;
virtual void releaseConnection(sql::Connection * theConnection) =0;
};
Run Code Online (Sandbox Code Playgroud)
这是具体的类声明:
class AlwaysConnectedConnectionZPool: public ConnectionPool {
protected:
<snip data members> …Run Code Online (Sandbox Code Playgroud) 问候所有,
我来自Java背景,我在多重继承方面遇到困难.
我有一个名为IView的接口,它有init()方法.我想派生一个名为PlaneViewer的新类,实现上面的接口并扩展另一个类.(QWidget的).
我的实现如下:
IViwer.h(只有头文件,没有CPP文件):
#ifndef IVIEWER_H_
#define IVIEWER_H_
class IViewer
{
public:
//IViewer();
///virtual
//~IViewer();
virtual void init()=0;
};
#endif /* IVIEWER_H_ */
Run Code Online (Sandbox Code Playgroud)
我的派生类.
PlaneViewer.h
#ifndef PLANEVIEWER_H
#define PLANEVIEWER_H
#include <QtGui/QWidget>
#include "ui_planeviewer.h"
#include "IViewer.h"
class PlaneViewer : public QWidget , public IViewer
{
Q_OBJECT
public:
PlaneViewer(QWidget *parent = 0);
~PlaneViewer();
void init(); //do I have to define here also ?
private:
Ui::PlaneViewerClass ui;
};
#endif // PLANEVIEWER_H
Run Code Online (Sandbox Code Playgroud)
PlaneViewer.cpp
#include "planeviewer.h"
PlaneViewer::PlaneViewer(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
PlaneViewer::~PlaneViewer() …Run Code Online (Sandbox Code Playgroud) 我试图将c ++代码包装到python中,只有一个类可以导出两个函数.我编译到map.so,当我试图import map 得到像噪音一样的错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./map.so: undefined symbol: _ZTIN5noise6module6ModuleE
Run Code Online (Sandbox Code Playgroud)
我的c ++目录看起来像(噪声是dowwnloaded源代码,所有代码都在src中)
/ map.cpp
real_map.h
real_map.cpp
noise/
src/
.h and .cpp and new directory
Run Code Online (Sandbox Code Playgroud)
我的CMakeLists.txt看起来像
project (map)
cmake_minimum_required(VERSION 2.8)
find_package(PythonLibs)
include_directories (${PYTHON_INCLUDE_DIRS})
find_package(Boost 1.45.0 COMPONENTS python)
include_directories (${Boost_INCLUDE_DIRS})
add_library (
map SHARED
WrappedMediumMapTile.cpp
)
target_link_libraries (medium_map
boost_python
${PYTHON_LIBRARIES}
${Boost_LIBRARIES}
)
Run Code Online (Sandbox Code Playgroud)
有谁知道什么是问题?
我要包装的.cpp类
#include <list>
#include <iostream>
#include <vector>
#include <utility>
#include <map>
#include "noise/src/noise.h"
#include "noiseutils/noiseutils.h"
class MapTile
{ …Run Code Online (Sandbox Code Playgroud) 我/GR-在CMake中有一个使用(禁用RTTI)构建的静态库:
add_library(LibName STATIC someSource.cpp)
target_compile_options(LibName PRIVATE /GR-)
...
Run Code Online (Sandbox Code Playgroud)
我的可执行文件是使用/GR(启用RTTI)构建的,并且取决于库:
target_link_libraries(myTarget ${LibName})
target_compile_options(myTarget PRIVATE /GR)
...
Run Code Online (Sandbox Code Playgroud)
当分别使用标志-fno-rtti&与GCC进行相同操作时-frtti,您将收到链接器错误,例如:undefined reference to typeinfo for ClassName。为什么不使用MSVC,我需要担心吗?还是这是MSVC的功能?
c++ ×6
gcc ×2
virtual ×2
boost ×1
boost-python ×1
compilation ×1
g++ ×1
inheritance ×1
linker ×1
python ×1
typeinfo ×1
visual-c++ ×1