c – ClientClass没有命名类型. GCC Linux
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – ClientClass没有命名类型. GCC Linux,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2613字,纯文字阅读大概需要4分钟。
内容图文
![c – ClientClass没有命名类型. GCC Linux](/upload/InfoBanner/zyjiaocheng/961/e6d41cd25b3f4ff38227ef643b30d498.jpg)
在制作我的代码时,我遇到了一个奇怪的问题.我为所有包含1个文件,我们称之为includes.h和类文件,如clientclass.h等.
问题是,当我尝试编译我的代码时,我得到一个编译器错误:
/mnt/orange-new/units/includes.h|34|error:
‘ClientClass’ does not name a type|
包括:
#ifndef INCLUDES_H_INCLUDED
#define INCLUDES_H_INCLUDED
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <sys/timeb.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <time.h>
#include <iostream>
#include <cstring>
#include <string>
#include "config.h"
#include "console.h"
#include "clientclass.h"
#include "tcpparser.h"
#include "netmsg.h"
#include "main.h"
Console Konsola;
ClientClass Clients;
TCPThread ParserTCP;
#endif // INCLUDES_H_INCLUDED
clientclass.h:
#ifndef CLIENTCLASS_H_INCLUDED
#define CLIENTCLASS_H_INCLUDED
#include "includes.h"
struct ClientStruct {
int Sock;
int Ident;
int Room;
std::string Name;
std::string IP;
};
class ClientClass {
public:
ClientClass(); // create
int Add();
void Delete(int index);
int Count();
ClientStruct Client[MAX_CLIENTS];
protected:
void Reset(int index);
private:
int _count;
};
#endif // CLIENTCLASS_H_INCLUDED
你能解决我的问题吗?我的想法:(
解决方法:
你有一个循环依赖:includes.h – > clientclass.h – > INCLUDES.H.如何解决这个问题取决于首先包含哪个标题,但它总是会令人困惑.最有可能是它造成了这条线
#include <clientclass.h>
成功但未能包含内容,因为即使内容尚不存在,已经定义了包含保护CLIENTCLASS_H_INCLUDED.
要解决此问题,您可以从clientclass.h中删除includes.h的包含,如果它不用于任何内容.如果使用includes.h中的类型,则可以使用forward-declarations,它声明类存在而不定义它,例如
class ClientClass;
这样,您可以使用指向ClientClass的指针和引用,而无需包含clientclass.h.你不能做的是声明前向声明类型的值,因为编译器必须知道关于类型的所有内容(至少它有多大)才能为该类型的值保留内存.如果你需要这个,你可能需要将标题分成较小的部分,并且只包括你所依赖的小部分.
因此,例如,您可以执行以下操作:
class MyClass;
MyClass * globalPointer;
void doSomething(const MyClass & foobar);
没有在范围内定义MyClass.这里的两个表达式仅通过指针或引用使用MyClass.但以下方法不起作用:
class MyClass;
void doSomethingElse() {
MyClass theobject;
doSomething(theobject);
}
这需要在堆栈上为MyClass类型的对象保留空间.如果没有在范围内定义MyClass,编译器无法知道要分配多少内存.
在您的情况下,您正在定义ClientClass类型的全局值,这需要ClientClass的完整定义,而不仅仅是前向声明.你有几个选择:
>进一步细分包含文件,以便只包含您需要的小部分
>在包含ClientClass的完整定义之后,通过指针保持全局值,并在代码中稍后将其分配
另一种选择是重新考虑全局变量是否是正确的解决方案.
内容总结
以上是互联网集市为您收集整理的c – ClientClass没有命名类型. GCC Linux全部内容,希望文章能够帮你解决c – ClientClass没有命名类型. GCC Linux所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。