
2. 写一个TCP通信,A进程把buf数据通过socket,发送到B进程。B进程接收到数据数据后,进行后续 *** 作。
C source file的实现。#include "obj.h"
int main(const int argc, const char **argv){
void *temp_obj = getObj(100)
printString(temp_obj)//实现C语言调用QT/C++UI界面
return (0)
}
写一个C++ source file和c source file都可以共同包含的头文件,如下所示。
#include <stdint.h>
#ifdef __cplusplus
class Obj{
public:
Obj(int32_t a=50)
~Obj()
std::string toString()
private:
int32_t k
}
#endif
#ifdef __cplusplus
extern "C" {
#endif
void* getObj(int32_t a)
void destroyObj(void *obj)
void printString(void *obj)
#ifdef __cplusplus
}
#endif
C++ source file的实现,其中C语言函数是供C source file调用的。
#include <iostream>
#include <sstream>
#include <iomanip>
#include <stdint.h>
#include "obj.h"
Obj::Obj(int32_t a){
k = a <<1
}
Obj::~Obj(){
/* don't really need to do anything here */
/* k = 0 only for example purposes */
k = 0
}
std::string Obj::toString(){
std::ostringstream os
os <<"Obj is currently: " <<this->k <<std::endl
return os.str()
}
void* getObj(int32_t a){
Obj *out = new Obj(a)
return ((void*)out)
}
void destroyObj(void* obj){
delete (((Foo*)obj))
}
void printString(void *obj){
std::string s = ((Obj*)obj)->toString()
std::cout <<s
}
Makefile
make file的实现。
CC ?= gcc
CXX ?= g++
CFLAGS = -O0 -g
CXXFLGS = -00 -g
OBJ = main obj
OBJS = $(addsuffix .o,$(OBJ))
all:
make compile
compile:
make $(OBJS)
make objexe
fooexe: $(OBJS)
$(CXX) -o fooexe $(OBJS)
main.o: main.c
$(CC) -c -o main.o main.c
obj.o: obj.cpp
$(CXX) -c -o obj.o obj.cpp
clean:
rm -rf $(OBJS) objexe *.dSYM
具体调试自己弄吧……下面是我觉得的问题:
1、在实现operator=()时没有考虑自我赋值的情况(不严密,但不影响此次实验结果)
2、input()函数中不能保证name被正确赋值
3、while((c=getchar())!='\n'||i<n) //输入空格键或超过最大商品数则停止输入。这句话矛盾,安根据我的理解,将或运算改为与运算
4、 for(int j=0j<=ij++) //遍历对象数组,输出商品信息。循环结束的条件错误,比如i==n成立时,则循环内a[j]会超出范围
5、while(tag)循环内里面的语句:其一、将c=getchar()放到第一个 if 前面,因为c这个变量后面还需要用到,或者删除第二个if 中的c=getchar(),将其改为c==027;其二,ESC的ASCII码不是十进制的27吗?027代表八进制的27,不是ESC,自己查表再看一下吧
建议:
1、适用C++提供的类string来代替字符串,比如string name
2、减少不必要的注释
3、耐心加仔细
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)