Apache Thrift C ++ проблема определения типа

Я пытаюсь создать простой благотворительный сервер, который умножает два числа.

Я написал файл комиссионных следующим образом:

namespace cpp tutorial

typedef i32 int

service MultiplicationService
{

int multiply(1:int n1, 2:int n2),

}

После этого я побежал thrift --gen cpp multi.thrift

Я переименовал файл скелета в MultiplicationServer.cpp который выглядит так:

#include "MultiplicationService.h"#include <thrift/protocol/TBinaryProtocol.h>
#include <thrift/server/TSimpleServer.h>
#include <thrift/transport/TServerSocket.h>
#include <thrift/transport/TBufferTransports.h>

using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using namespace ::apache::thrift::server;

using boost::shared_ptr;

using namespace  ::tutorial;

class MultiplicationServiceHandler : virtual public MultiplicationServiceIf {
public:
MultiplicationServiceHandler() {
// Your initialization goes here
}

int multiply(const int n1, const int n2) {
return n1 * n2;
}

};

int main(int argc, char **argv) {
int port = 9090;
shared_ptr<MultiplicationServiceHandler> handler(new MultiplicationServiceHandler());
shared_ptr<TProcessor> processor(new MultiplicationServiceProcessor(handler));
shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());

TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
server.serve();
return 0;
}

Но когда я пытаюсь собрать его, я получаю эту ошибку в файле multi_types.h: multiple types in one declaration
в строке typedef int32_t int
Файл multi_types.h выглядит так:

/**
* Autogenerated by Thrift Compiler (0.9.2)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
*  @generated
*/
#ifndef multi_TYPES_H
#define multi_TYPES_H

#include <iosfwd>

#include <thrift/Thrift.h>
#include <thrift/TApplicationException.h>
#include <thrift/protocol/TProtocol.h>
#include <thrift/transport/TTransport.h>

#include <thrift/cxxfunctional.h>namespace tutorial {

typedef int32_t int;

} // namespace

#endif

Я пытался удалить эту строку, но потом я получаю много undefined reference to ошибки.

Что я делаю неправильно?

0

Решение

Вы пытаетесь набрать опеку i32 введите в int, который, по сути, производит столкновение имен.

Таким образом, решение состоит в том, чтобы не делать это:

namespace cpp another_tutorial

// typedef i32 int - don't try this at home

service MultiplicationService
{
i32 multiply( 1 : i32 n1, 2 : i32 n2)
}
0

Другие решения


По вопросам рекламы [email protected]