codeblocks下的多文件/实现头文件,主函数,类的分离

本文详细介绍了如何在CodeBlocks中创建并使用C++模板函数,包括头文件、源文件的编写及注意事项。同时,通过实例演示了模板函数编译时可能出现的错误,并提供了相应的解决方案。

1.首先建一个project,选择建Project,然后再选择file添加你所需要的类型文件。


记住选择完你需要的类型之后,继续的时候,要保存在你建的project下就行,保持默认。一定要选上debug和release,不然等会该文件是不能用的。

2.头文件有些不一样的地方,当你按上面做完之后,会发现头文件的字是灰色,此时是不能编译的,这里需要再介绍个菜单栏

将鼠标放在头文件的地方,按鼠标右键,选择properties键,选择Build,如果前面忘记选上Debug和release的话,这里还能重选。这里要将compile file选上,但是link file一定不能选,若是选择了link file,最终编译时会出现Process terminated with status 1这个问题。

3.将所有文件图标都点亮之后,就可以写程序了。

引用本程序头文件中的要用#include"  ",记住是双引号,<>是编译器自带的头文件。

对于头文件是“文件名.h”,对于同一编译单元下的cpp文件,除了函数接口外,就是用#include ”文件名.cpp“。

转的一个模型,可以用这个实例做一下,熟悉一下环境。

1.包含编译模型:

以下是一个cmp函数文件的.h和.cpp文件

//cmp header file

#ifndef CMP_H_INCLUDED
#define CMP_H_INCLUDED

template<typename T> T cmp(T number1, T number2);

#include "cmp.cpp"  //将cmp.cpp包含进.h文件之中,此为包含编译模型
#endif // CMP_H_INCLUDED

 

//cmp source file

#include "cmp.h"

template<typename T>
T cmp(T number1, T number2)
{
  return number1 - number2;
}

 

//main.cpp

#include <iostream>
#include "cmp.h"

using namespace std;

int main()
{
  cout << cmp(1, 10) << endl;
  return 0;
}

但程序编译时会出现以下错误:

其意思就是:

在cmp.cpp文件中template<typename T> T cmp(T, T)出现重定义

在这之前template<typename T> T cmp(T, T)已经被定义 

 

2.分离编译模型

//cmp header file

#ifndef CMP_H_INCLUDED
#define CMP_H_INCLUDED

template<typename T> T cmp(T number1, T number2);


#endif // CMP_H_INCLUDED

 

//cmp source file

#include "cmp.h"

export template<typename T> //此句是实现分离编译模型的基础
T cmp(T number1, T number2)
{
  return number1 - number2;
}

 

//main.cpp

#include <iostream>
#include "cmp.h"

using namespace std;

int main()
{
  cout << cmp(1, 10) << endl;
  return 0;
}

但程序在编译时会出现以下错误:

 

意思如下:

export 不能实现,将被忽略

没有定义int cmp<int>(int, int),在函数实例化时,没有找到模板的实现文件

但是以上的两种不支持并不影响模板在CodeBlocks中的使用,因为以下两种方式编写模板文件在CodeBlocks均可以正常使用。

1.只为模板文件建立一个.h文件,将实现代码全部放在.h文件之中。

2.将.h文件和.cpp文件分开,在使用时这样使用

   #include "cmp.h"

   #include "cmp.cpp"







### 如何在Code::Blocks中实现Socket编程 要在Code::Blocks中进行Socket编程,首先需要确保开发环境支持网络编程所需的头文件和库。Socket编程主要依赖于系统提供的网络库,如`libsocket`或`libnetinet`等[^2]。对于Ubuntu系统而言,可以通过安装相关开发包来获取这些库文件。 #### 配置Socket编程环境 1. **安装必要的开发库**: 在Ubuntu上,可以使用以下命令安装Socket编程所需的开发库: ```bash sudo apt-get install libsocket++-dev ``` 2. **配置Code::Blocks的编译器选项**: 为了使Code::Blocks能够识别Socket编程相关的头文件,需要在项目的构建选项中添加相应的头文件路径。具体步骤如下: - 打开项目后,点击菜单栏中的“Project” -> “Build Options...”。 - 在弹出的窗口中选择左侧的“Debug”或“Release”,根据实际情况选择。 - 转到“Search directories”标签页,点击“Add”按钮,依次添加以下路径: ``` /usr/include/sys /usr/include/netinet /usr/include/arpa ``` - 确认设置后关闭窗口,重启Code::Blocks以使更改生效[^3]。 3. **链接Socket库**: 编译时还需要链接Socket库,通常为`-lsocket`或`-lnsl`(在网络程序中用于名称服务)。可以在“Build Options...”对话框中的“Linker settings”标签页下添加这些库名称。 #### 示例代码 下面是一个简单的TCP服务器示例,演示了如何创建一个监听套接字并接受客户端连接: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main(int argc, char *argv[]) { int sockfd, newsockfd, portno; socklen_t clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) printf("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = 5000; // 设置端口号 serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) printf("ERROR on binding"); listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) printf("ERROR on accept"); bzero(buffer,256); n = read(newsockfd,buffer,255); if (n < 0) printf("ERROR reading from socket"); printf("Here is the message: %s\n",buffer); n = write(newsockfd,"I got your message",18); if (n < 0) printf("ERROR writing to socket"); close(newsockfd); close(sockfd); return 0; } ``` ### 如何同时运行两个项目文件 在Code::Blocks中同时运行两个项目文件可以通过以下几种方式实现: 1. **打开多个实例**: 可以通过多次启动Code::Blocks应用程序来打开不同的项目。每个实例独立运行,互不影响。 2. **使用工作区(Workspace)**: 创建一个新的工作区,然后将两个项目添加到这个工作区中。这样可以在同一个界面中管理和构建多个项目。 - 新建一个空白的工作区。 - 将已有的项目文件拖拽到工作区管理器中,或者通过“File”->“Add files to workspace”来添加项目。 - 使用工作区工具栏上的按钮来切换活动项目,并分别构建和运行它们。 3. **并行构建与运行**: 如果希望在一个操作中同时构建或运行多个项目,可能需要编自定义的Makefile或者利用脚本自动化这一过程。例如,可以编一个shell脚本来启动两个不同的终端窗口,分别执行各自的编译和运行命令。 通过以上方法,可以有效地在Code::Blocks环境中进行Socket编程,并且灵活地管理多个项目的同时运行需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值