Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨多个Cpp文件使用变量_C++_Scope_Header Files_Ld_Extern - Fatal编程技术网

C++ 跨多个Cpp文件使用变量

C++ 跨多个Cpp文件使用变量,c++,scope,header-files,ld,extern,C++,Scope,Header Files,Ld,Extern,我已经找到了足够多的答案,但没有一个对我有用 情景: 我试图包含一个.h文件,其中声明了一些函数(未定义)和一些变量 如果我在实际使用函数和变量的源文件(准确地说是2个)中包含这个头文件,那么最后一个编译的头文件有一个链接器错误 对“abc::myfun(char const*,char const*,char*)”的未定义引用 头文件中的所有函数和变量都已声明为extern,并且存在include-guard 我希望一个cpp文件在.h文件中定义的变量中放入一个值,另一个cpp文件能够读取该值

我已经找到了足够多的答案,但没有一个对我有用

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

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

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

头文件中的所有函数和变量都已声明为extern,并且存在include-guard

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


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

您的
.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;
#include "foo.h"
void bar()
{
  global_foo = 0; // accessing that variable which is "outside" of this file
main.c

#include "foo.h"
int global_foo; // optionally you can initialize like this: int global_foo = 123;
#include "foo.h"
void bar()
{
  global_foo = 0; // accessing that variable which is "outside" of this file

正如上面提到的那样-确保您没有意外地嵌套名称空间,因为
abc::something
abc::abc::something

文件中的声明不同。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;
#include "foo.h"
void bar()
{
  global_foo = 0; // accessing that variable which is "outside" of this file
main.c

#include "foo.h"
int global_foo; // optionally you can initialize like this: int global_foo = 123;
#include "foo.h"
void bar()
{
  global_foo = 0; // accessing that variable which is "outside" of this file

正如上面提到的那样-确保您没有意外地嵌套名称空间,因为
abc::something
abc::abc::something
您的错误似乎与
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
    }
}

您的错误似乎与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
    }
}

首先,是否至少有一个源文件定义了变量/函数?你在链接中包括了吗?第二,是否在名称空间之外包含标题?您不想不经意间嵌套-ie
abc::abc::something
特别是
abc::myfun(char-const*,char-const*,char*)
,从错误中可以看出,这似乎至少是一个罪魁祸首。您是否可以从头文件中发布声明,以及它在源文件中的定义位置?首先,是否至少有一个源文件定义了变量/函数?你在链接中包括了吗?第二,是否在名称空间之外包含标题?您不想不经意间嵌套-ie
abc::abc::something
特别是
abc::myfun(char-const*,char-const*,char*)
,从错误中可以看出,这似乎至少是一个罪魁祸首。你能从你的头文件中发布声明并在源文件中定义它吗?但这不起作用,它仍然说变量和函数有未定义的引用。你能把你的问题提取成一个简短的代码示例并提供它以及你得到的错误吗?(以及用于构建的命令行)但这不起作用,它仍然表示变量和函数具有未定义的引用。您是否可以将问题提取为一个简短的ish代码示例,并将其与您得到的错误一起提供?(以及用于构建的命令行)@VenushreePatel-Hmm,恐怕我需要查看您的代码才能进一步诊断。@VenushreePatel-Hmm,恐怕我需要查看您的代码才能进一步诊断。