我正在使用自定义构建的SDK构建C ++控制台应用程序。我有头文件和库,但我没有源代码(实现)。
在一个特定情况下,由于位于不同的名称空间中,一个类中的方法(比如说A类)无法访问类B.
如果知道我没有源代码,我该如何解决这个问题。
在main函数中,我通过编写以下命令来创建对象引用:
Event *event=new Event();
在编写此语句时,我收到以下编译器错误:
(Event.o):在功能上 COM :: EGI ::服务:: MFF :: API ::活动:: setBeginTime(EGIBase :: EGIXStringWrap)&#39 ;: Event.cpp :(。text + 0xacd):未定义的引用 EGIBase :: EGIXStringWrap :: getStringCopy [ABI:cxx11]()'
代码如下:
#include "Event.h"
#include "EGIXStringWrap.h"
int main()
{
Event *event=new Event(); // This is where the error crops up.`
}
PS:EGIXStringWrap
和Event
是类。
Event的setBeginTime()方法调用EGIXStringWrap的getStringCopy()方法
答案 0 :(得分:1)
(Event.o):在功能上 COM :: EGI ::服务:: MFF :: API ::活动:: setBeginTime(EGIBase :: EGIXStringWrap)“: Event.cpp :(。text + 0xacd):未定义的引用 EGIBase :: EGIXStringWrap :: getStringCopy [abi:cxx11]()'
鉴于您发布的内容,这意味着名称空间 com :: egi :: services :: mff :: api 中的事件类的函数setBeginTime()具有以下参数:输入属于 EGIBase 名称空间的 EGIXStringWrap 。
直到这里一切都很顺利,因为编译器会在该行之后继续解析。我们可以推断出 EGIBase 命名空间对于类 Event 的库是可见的。
<强>假设:强>
然后,编译器无法在 EGIBase :: EGIXStringWrap 命名空间内找到对 getStringCopy 的引用,该命名空间是二进制形式(可能是.o)预计将使用兼容C ++ 11的编译器构建。
鉴于我的假设是正确的:
首先,您不可能做任何事情,因为已经编译了这些库,更好地联系他们的提供者。
其次, getStringCopy 位于同一名称空间 EGIBase 中,因此必须可见。
除此之外,我发现生成的二进制库不太可能与以前的C ++版本的库不兼容(尽管不是不可能)。
答案 1 :(得分:1)
以防我们的其他客户遇到此问题,这只是一个链接订单问题;图书馆很好。如果您有任何疑问,请联系我们的支持 - EGI。