【发布时间】:2011-12-22 15:50:21
【问题描述】:
我正在尝试编译一个简单的测试程序,我包含的头文件之一具有以下 typedef
typedef const char* CharConst;
typedef unsigned int MyBool;
在头文件的后面,一些函数是使用这个typedef定义的。像这样的东西:
MyBool add_att(CharConst attr, const char*);
当我尝试调用此函数时出现错误,调用如下:
CharConst myconst = "some text";
const char* more_text = "more text";
add_att(myconst, more_text);
错误是:未定义引用 `MyClass::add_att(char const*, char const*)'
似乎编译器不喜欢第一个参数已经在头文件中进行了类型定义的事实。但它不介意 MyBool。编译器只抱怨 CharConst 定义。
有什么简单的方法可以解决这个问题吗?关于我能做什么的任何线索或提示?我正在运行 gcc 4.6.2 版
【问题讨论】:
-
在定义中显示函数签名。也永远不要在指针类型上使用
typedef,它会让人困惑,而且这样的问题总是会随之而来。 -
您是否在尝试调用该函数的文件中包含了声明/定义
add_att()的头文件?add_att()是否在一个库中定义而您忘记链接到该库? -
typedef不应该有任何区别(除了让任何试图阅读代码的人感到困惑之外)。看起来您还没有实现该功能,或者您没有链接到包含其实现的文件。 -
是的,我有一个包含,否则编译器会抱怨的不仅仅是这个。根据库,我的编译行如下所示: g++ main.cpp myclass.cpp -L/opt/stuff/lib -lstuff 任何线索? lib 文件夹包含 libstuff.a、libstuff_c++.a、libstuff_c++.la 和 libstuff.la。我需要一个so文件吗?
-
@jasonmclose:函数是在
myclass.cpp中定义的吗?基本上,您向我们展示的代码就可以了。而且这不是超出玩具阶段的编译器可能会犯的那种错误,因此它成为编译器问题的可能性(你已经很小了)是天文数字。所以错误一定是在你没有向我们展示的代码中,并且给出了确切的错误,可能与链接有关。
标签: c++ linux compiler-construction g++ typedef