Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++ 具有多个文件的命名空间_C++_Namespaces - Fatal编程技术网

C++ 具有多个文件的命名空间

C++ 具有多个文件的命名空间,c++,namespaces,C++,Namespaces,在文件3.h内 #ifndef FILETHREE #define FILETHREE namespace blue{} class Filethree { public: Filethree(void); ~Filethree(void); }; #endif 内部FileThree.cpp #include "Filethree.h" #include<iostream> using namespace std ; namespace blue{ vo

在文件3.h内

#ifndef FILETHREE
#define FILETHREE
namespace blue{}
class Filethree
{
public:
    Filethree(void);
    ~Filethree(void);
};
#endif
内部FileThree.cpp

#include "Filethree.h"
#include<iostream>
using namespace std ;
namespace blue{
     void blueprint(int nVar){
         cout<<"red::"<<nVar<<endl;
     }
}
Filethree::Filethree(void)
{
}

Filethree::~Filethree(void)
{
}
内部FileFour.cpp

#include "FileFour.h"
#include<iostream>
using namespace std; 
 namespace red{
     void redprint(double nVar){
         cout<<"red::"<<nVar<<endl;
     }
}
FileFour::FileFour(void)
{
}

FileFour::~FileFour(void)
{
}
#include "FileFour.h"
#include<iostream>
using namespace std; 
void red::redprint(int nVar)
{
    cout<<"red"<<nVar<<endl;
}
FileFour::FileFour(void)
{
}

FileFour::~FileFour(void)
{
}
当我编译上面的文件时,它给出了以下错误

 error C3861: 'blueprint': identifier not found

有人能告诉我为什么会出现这个错误吗?

当函数没有在头文件中声明时,编译器找不到它们。 您需要在FileThree.h中的
namespace blue
中声明
blueprint
函数

#ifndef FILETHREE
#define FILETHREE
namespace blue{}
class Filethree
{
public:
    Filethree(void);
    ~Filethree(void);
};
#endif
文件3.h:

namespace blue{
    void blueprint(int nVar);
}
redprint
函数相同,需要在
名称空间red
中的FileFour.h中声明它

FileFour.h

#ifndef FILEFOUR
#define FILEFOUR
namespace red{}
class FileFour
{
public:
    FileFour(void);
    ~FileFour(void);
};
#endif
namespace red{
   void redprint(double nVar);
}
#ifndef FILEFOUR
#define FILEFOUR
namespace red{
     void redprint(int nVar);        
}
class FileFour
{
public:
    FileFour(void);
    ~FileFour(void);
};
#endif
内部文件4.h

#ifndef FILEFOUR
#define FILEFOUR
namespace red{}
class FileFour
{
public:
    FileFour(void);
    ~FileFour(void);
};
#endif
namespace red{
   void redprint(double nVar);
}
#ifndef FILEFOUR
#define FILEFOUR
namespace red{
     void redprint(int nVar);        
}
class FileFour
{
public:
    FileFour(void);
    ~FileFour(void);
};
#endif
内部FileFour.cpp

#include "FileFour.h"
#include<iostream>
using namespace std; 
 namespace red{
     void redprint(double nVar){
         cout<<"red::"<<nVar<<endl;
     }
}
FileFour::FileFour(void)
{
}

FileFour::~FileFour(void)
{
}
#include "FileFour.h"
#include<iostream>
using namespace std; 
void red::redprint(int nVar)
{
    cout<<"red"<<nVar<<endl;
}
FileFour::FileFour(void)
{
}

FileFour::~FileFour(void)
{
}
内部Filethree.cpp

#include "Filethree.h"
#include<iostream>
using namespace std ;
void blue::blueprint(int nVar)
{
    cout<<"blue"<<nVar<<endl;
}
Filethree::Filethree(void)
{
}

Filethree::~Filethree(void)
{
}
#包括“Filethree.h”
#包括
使用名称空间std;
虚空蓝色::蓝图(内部nVar)
{
库特
当您将代码分割成多个文件时,您必须使用
头文件和源文件中的命名空间

add.h
#如果没有添加
#定义添加
命名空间基本路径
{
//函数add()是命名空间basicMath的一部分
整数加(整数x,整数y);
}
#恩迪夫
add.cpp
#包括“add.h”
命名空间基本路径
{
//定义函数add()
整数相加(整数x,整数y)
{
返回x+y;
}
}
main.cpp
#包括“add.h”//for basicMath::add()
#包括
int main()
{

std::cout,但我在cpp文件中声明了相同的。并且在头文件中给出了一个转发声明。我是否遗漏了什么?您遗漏了我所说的内容。:)在链接时可以看到.cpp文件中的定义。因此,只有头文件编译,在链接过程中,它们链接到cpp文件以获得定义。如果我错了,请更正。您在哪里在
main
中调用
blueprint
,编译器必须先看到名称
blueprint
,然后才能使用它。这可以来自函数的声明或定义。在任何程序中,您可以有任意多个函数的重新声明,但只有一个定义。这就是为什么我们在nto
.h
.cpp
文件。我们将声明保存在标题中(总体上),以及我们在cpp文件中的定义。编译器编译cpp文件,但拉入头文件以查看函数声明。@PeterWood::感谢您让我对编译和链接过程有一点了解。删除FileThree.h和FileThree.h中的“extern”。删除extern后,不会出现任何错误。请我看到了我编辑过的文章。无论如何,谢谢你提供的链接,这有助于我理解编译和链接过程。