如何在C++源文件中不使用类名称空间前缀?
我有这个样子如何在C++源文件中不使用类名称空间前缀?
#ifndef NORMALCLIENT_H #define NORMALCLIENT_H
#include <ClientType.h>
class NormalClient : public ClientType {
public:
NormalClient();
NormalClient(const NormalClient& orig);
double getDiscount();
int getMaxRents();
virtual ~NormalClient();
private:
};
#endif /* NORMALCLIENT_H */
和源文件我的头文件:
#include "NormalClient.h" NormalClient::NormalClient() {
}
NormalClient::NormalClient(const NormalClient& orig) {
}
NormalClient::~NormalClient() {
}
不是有重复的源文件NormalClient::
的一种方式? 我想:
#include "NormalClient.h" using namespace NormalClient
NormalClient() {
}
NormalClient(const NormalClient& orig) {
}
~NormalClient() {
}
但它在编译过程中给我的错误:
/home/grayrattus/projekt/trunk/trunk/biblioteka/src/model/client_types/NormalClient.cpp:3:17: error: ‘NormalClient’ is not a namespace-name using namespace NormalClient
^
/home/grayrattus/projekt/trunk/trunk/biblioteka/src/model/client_types/NormalClient.cpp:5:1: error: expected namespace-name before ‘NormalClient’
NormalClient() {
^
我不明白为什么编译器为命名空间的错误,当我之前定义它。
问题: 有没有一种方法不重复源文件中的命名空间?
回答:
编译器需要知道对应于类声明的定义在哪里。
您刚刚在文件“ClientType.h”中声明了该类。 另一方面,您需要定义类,它将正常位于cpp文件中。
(约合声明和定义,见https://stackoverflow.com/a/1410632/9043064)
如果你想减少重复的源代码,那么你可以定义类在你的头文件
class NormalClient : public ClientType { public:
NormalClient() { // implementation }
NormalClient(const NormalClient& orig) { // implementation }
double getDiscount() { // implementation }
int getMaxRents() { // implementation }
virtual ~NormalClient() { // implementation }
private:
};
但它不是在推荐头文件越来越大。它可能会增加建筑时间。而且这也不是一个好习惯。 (https://stackoverflow.com/a/333964/9043064)
关于使用命名空间...我认为这将是有帮助的,你看这个(即使它无法实际用于实现类的定义)Why is "using namespace std" considered bad practice?
回答:
using namespace NormalClient;
是错误的原因。 NormalClient是一个类,而不是一个名称空间。您不必使用using namespace
来使用NormalClient头,您必须创建一个类的实例并使用点运算符访问内部内容,例如:NormalClient.something
。
以上是 如何在C++源文件中不使用类名称空间前缀? 的全部内容, 来源链接: utcz.com/qa/259428.html