在引入类文件时出现(error C4430: 缺少类型说明符 - 假定为 int。error C3646: 未知重写说明符)

项目场景:

在最近使用socket写p2p程序时,写了一个socket_server类文件(class声明写入.h,实现写入.cpp,在引入main.cpp时出现标题错误。)


问题描述:

  1. error C4430: 缺少类型说明符 - 假定为 int。
  2. error C3646: 未知重写说明符
  3. error C2039: “xxx”: 不是 “xxx” 的成员

原因分析:

  1. socket_server.cpp中引入了thread.h和mutex.h以及Winsock.h等头文件,在socket_server.h中只有最纯粹的class声明,其余实现文件和引入的头文件都写在.cpp中。部分代码示例如下:

socket_server.h

#pragma once
typedef std::vector<std::thread*> VectorThread;
class socket_server
{
private:
	SOCKET			skfd_server;
	int				LastErroFlag;
	int				af;
	char			ServerIP[50];
	UINT			port;
	bool			IfInitEnvSucess;
	bool			IfCreateServerSocketSucess;
	VectorThread	threads;

	bool	InitEnviroment();
	bool	ServerCreateSocket();
	bool	ServerBind();
	bool	ServerListen();
	void	ServerAccept();
	void	ShowError();
	bool	Thread2ProcessNewPeer(SOCKET newpeersocket);
public:
	socket_server();
	~socket_server();
};

socket_server.cpp

#include <iostream>
#include <Winsock2.h>
#include <thread>
#include <vector>
#pragma comment(lib, "ws2_32.lib")

#include "socket_server.h"

......
......
......
  1. 在main函数中只引入了socket_server.h,示例如下:
#include <iostream>
#include "socket_server.h"

int main()
{

    return 0;
}

根本原因:
(1) 编译器是以源文件为单位的,处理头文件时会将头文件释放在被引入的源文件中(当main.cpp中注释掉#include "socket_server.h" 错误就会消失);
(2) 当将socket_server.hmain.cpp释放时问题就来了,socket_server.h所依赖的头文件全在socket_server.cpp中,而main.cpp没有引入<vector><Win32.h>


解决方案:

  1. 将头文件声明中所依赖的库文件放到头文件中;
  2. 将头文件复制一份写在main.cpp中;
  3. 引入pch.h,将公共依赖头文件写入其中,在需要的地方都写上#include<pch.h>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值