具有多个文件的命名空间

时间:2013-01-09 06:20:08

标签: c++ namespaces

在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

有谁能告诉我为什么会收到此错误?

3 个答案:

答案 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