在FileThree.h中
#ifndef FILETHREE
#define FILETHREE
namespace blue{}
class Filethree
{
public:
Filethree(void);
~Filethree(void);
};
#endif
Inside 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.h中
#ifndef FILEFOUR
#define FILEFOUR
namespace red{}
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)
{
}
在main.cpp内部
#include "FileFour.h"
#include "Filethree.h"
using namespace red ;
using namespace blue ;
int main()
{
blueprint(12);
return 0;
}
当我编译上面的文件时,它给了我以下错误。
error C3861: 'blueprint': identifier not found
有谁能告诉我为什么会收到此错误?
答案 0 :(得分:5)
编译器在头文件中未声明时无法找到函数。
您需要在FileThree.h中的blueprint
中声明namespace blue
函数
FileThree.h:
namespace blue{
void blueprint(int nVar);
}
与redprint
函数相同,需要在namespace red
内的FileFour.h中声明它
FileFour.h
namespace red{
void redprint(double nVar);
}
答案 1 :(得分:0)
在FileFour.h中
#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;
void red::redprint(int nVar)
{
cout<<"red"<<nVar<<endl;
}
FileFour::FileFour(void)
{
}
FileFour::~FileFour(void)
{
}
在Filethree.h中
#ifndef FILETHREE
#define FILETHREE
namespace blue{
void blueprint(int nVar);
}
class Filethree
{
public:
Filethree(void);
~Filethree(void);
};
#endif
Inside 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)
{
}
在main.cpp内部
#include <iostream>
using namespace std;
#include "FileFour.h"
#include "Filethree.h"
using namespace blue ;
int main()
{
blueprint(12);
return 0;
}
定义应位于cpp文件中,其中作为头文件中的声明。
答案 2 :(得分:0)
将代码分成多个文件时,您必须使用 标头和源文件中的名称空间。
add.h
#ifndef ADD_H
#define ADD_H
namespace basicMath
{
// function add() is part of namespace basicMath
int add(int x, int y);
}
#endif
add.cpp
#include "add.h"
namespace basicMath
{
// define the function add()
int add(int x, int y)
{
return x + y;
}
}
main.cpp
#include "add.h" // for basicMath::add()
#include <iostream>
int main()
{
std::cout << basicMath::add(4, 3) << '\n';
return 0;
}
源:https://www.learncpp.com/cpp-tutorial/user-defined-namespaces/comment-page-4/#comment-464049