我的头文件看起来像这样
#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 )
关于使用命名空间...我认为阅读本文会对您有所帮助(即使实际上不可能用于实现类定义)为什么“使用命名空间 std”被认为是不好的做法?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句