0

已经搜索了足够的答案,但没有一个解决方案对我有用。

场景:我试图包含一个 .h 文件,其中声明了一些函数(未定义)和一些变量。

如果我在实际使用函数和变量的源文件(准确地说是 2)中包含这个头文件,那么最后一个编译的文件会出现链接器错误,指出

未定义对 `abc::myfun(char const*, char const*, char*)' 的引用

头文件中的所有函数和变量都已声明为 extern 并且存在包含保护。

我希望有一个 cpp 文件在 .h 文件中定义的变量中放入一个值,另一个 cpp 文件能够读取它。

此外,如果有帮助,我的每一段代码都在我定义的命名空间中 ( namespace abc{ //all my code, in all the files })

4

2 回答 2

3

.h文件中的声明正是这样做的 - 让编译器知道您计划声明“某处”的对象。该“某处”将是定义该变量的编译单元(一个或文件) 。.c.cpp

这是一个示例(为简单起见,跳过守卫):

foo.h

extern int global_foo;

foo.c

#include "foo.h"
int global_foo; // optionally you can initialize like this: int global_foo = 123;

main.c

#include "foo.h"
void bar()
{
  global_foo = 0; // accessing that variable which is "outside" of this file

正如上面提到的稻田 - 确保您不会意外嵌套命名空间,因为abc::something它与abc::abc::something

于 2012-08-22T00:35:25.320 回答
0

您的错误似乎与abc::myfun(char const*, char const*, char*). 我能够重现并确认这一点。如果没有第二部分,您将收到错误消息。

我猜你有一个类似的头文件

namespace abc 
{
    void myfun(char const* p1, char const* p2, char* p3);
}

和一个 .cpp 源文件需要

namespace abc
{
    void myfun(char const* p1, char const* p2, char* p3)
    {
        // do fun stuff
    }
}
于 2012-08-22T02:11:51.243 回答