gpt4 book ai didi

c++ - zeroMQ 客户端练习将接口(interface)与实现分离

转载 作者:行者123 更新时间:2023-11-27 23:49:32 25 4
gpt4 key购买 nike

我正在测试 ZeroMQ 框架异步库消息传递的示例,以在分布式应用程序中工作,从而实现编程语言之间的互操作性。

我编写了以下 C++ 客户端代码 based in this code

#include <zmq.hpp>
#include <iostream>
#include <sys/time.h>

using std::cout;
using std::cin;
using std::endl;
using std::string;

int main ()
{
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REQ);
struct timeval t_ini, t_fin;

gettimeofday(&t_ini, NULL);

cout << "Connecting to zeroMQ python server" << endl;
socket.connect ("tcp://localhost:5555");

// Send data to server socket
zmq::message_t request (20);
memcpy (request.data (), "Hola Servidor Python", 20);
socket.send (request);

// Getting reply form zeroMQ python server
zmq::message_t reply;
socket.recv (&reply);
string replyMessage = string(static_cast<char *>(reply.data()), reply.size());

cout << "Getting reply form zeroMQ python server: " + replyMessage << " " << endl;

gettimeofday(&t_fin, NULL);

printf("Tiempo en microsegundos: %ld microsegundos\n",
((t_fin.tv_sec - t_ini.tv_sec)*1000000L
+t_fin.tv_usec) -t_ini.tv_usec
);
return 0;

}

这个 c++ 客户端代码可以工作

我的目标是使用 C++ 头文件重写以前的代码,将接口(interface)与实现分开。

我有 client.h 文件,我在其中定义了 class Client

#ifndef ZEROMQ_CLASS_CLIENT_H
#define ZEROMQ_CLASS_CLIENT_H
#include <sys/time.h>
#include <iostream>

using std::string;

class Client{
public:
Client();
void setupConnection();

private:
//zmq::context_t context (1);
//zmq::socket_t socket (context, ZMQ_REQ);
struct timeval t_before, t_after;
string replyMessage;

};

#endif //ZEROMQ_CLASS_CLIENT_H

我有 client.cpp 文件,我在其中开发了我的 setupConnection() 成员函数

#include "client.h"
#include <zmq.hpp>

using std::cout;
using std::endl;



Client::Client(){

};

void Client::setupConnection(){

gettimeofday(&t_before, NULL);

cout << "Connecting to python zeroMQ server ..."<<endl;
zmq::context_t context(1);
zmq::socket_t socket (context, ZMQ_REQ);
socket.connect("tcp://localhost:5555");

zmq::message_t request (20);
memcpy(request.data(), "Hello Python server", 20);
socket.send(request);

zmq::message_t reply;
socket.recv(&reply);
replyMessage = string(static_cast<char *>(reply.data()), reply.size());

cout << "Getting response from server: " + replyMessage << " " << endl;
gettimeofday(&t_after, NULL);

printf("Time in microseconds: %ld microseconds\n",
((t_after.tv_sec - t_before.tv_sec)*1000000L
+t_before.tv_usec) -t_before.tv_usec
);
}

然后在 main.cpp 文件中创建对象并调用函数:

#include "client.h"

int main() {
Client c;
c.setupConnection();
return 0;
}

当我构建 main.cpp 文件时,我收到以下消息:

% g++ main.cpp -o client.out -lzmq
/tmp/cc8hDANf.o: In function `main':
main.cpp:(.text+0x20): undefined reference to `Client::Client()'
main.cpp:(.text+0x2c): undefined reference to `Client::setupConnection()'
collect2: error: ld returned 1 exit status

我不知道我的代码有什么问题,知道吗?

最佳答案

目前,您不编译client.cpp。包括 client.hpp 是不够的(显然这是一个单独的文件,您的编译器不会假定有相应的 .cpp 文件。)尝试添加 client .cpp 到你的 gcc 命令,即 g++ main.cpp client.cpp -lzmq

关于c++ - zeroMQ 客户端练习将接口(interface)与实现分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47516323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com