Компиляция кода C ++ Thrift для взаимодействия с Cassandra приводит к следующим ошибкам. Что нам здесь не хватает?

$ g ++ -lthrift -Wall thriftfs.cpp cassandra_constants.cpp Cassandra.cpp cassandra_types.cpp -o thriftfs -I / usr / local / include / thrift -L / usr / local / libIn, включенный из / usr / local / include / thrift /protocol/TProtocol.h:23:0,
из /usr/local/include/thrift/TProcessor.h:24,
от Кассандры.h: 10,
из исходного кода здесь hriftfs.cpp: 4:
/usr/local/include/thrift/transport/TTransport.h:34:1: ошибка: «uint32_t» не называет тип

/usr/local/include/thrift/transport/TTransport.h:156:29: ошибка: ISO C ++ запрещает объявление «buf» без типа [-fpermissive]

В файле, включенном в /usr/local/include/thrift/TProcessor.h:24:0,
от Кассандры.h: 10,
от thriftfs.cpp: 4:
/usr/local/include/thrift/protocol/TProtocol.h:184:1: ошибка: «uint32_t» не называет тип

В файле из Cassandra.h: 10: 0,
от thriftfs.cpp: 4:
/usr/local/include/thrift/TProcessor.h:72:57: ошибка: "uint32_t" не был объявлен

В файле из cassandra_types.h: 11: 0,
от Кассандры.h: 11,
от thriftfs.cpp: 4:
/usr/local/include/thrift/TApplicationException.h:94:3: ошибка: «uint32_t» не называет тип

В файле от Cassandra.h: 11: 0,
от thriftfs.cpp: 4:
cassandra_types.h: 85: 16: ошибка: «uint8_t» не называет тип
В файле от Cassandra.h: 11: 0,
от thriftfs.cpp: 4:
cassandra_types.h: 142: 3: ошибка: «uint32_t» не называет тип

В файле от Cassandra.h: 11: 0,
от thriftfs.cpp: 4:
cassandra_types.h: 1478: 16: ошибка: «uint8_t» не называет тип
В файле от Cassandra.h: 11: 0,
от thriftfs.cpp: 4:
cassandra_types.h: 1812: 3: ошибка: «uint32_t» не называет тип

В файле, включенном из thriftfs.cpp: 4: 0:
Cassandra.h: 217: 3: ошибка: «uint32_t» не называет тип

Cassandra.h: 4857: 35: ошибка: «org :: apache :: thrift» не был объявлен
Cassandra.h: 4857: 62: ошибка: ожидается ‘,’ или ‘...’ до токена ‘*’
Cassandra.h: 4859: 71: ошибка: невозможно объявить указатель на член 'void'
Cassandra.h: 4859: 145: ошибка: неверный аргумент шаблона 2
Cassandra.h: 4859: 145: ошибка: неверный аргумент шаблона 4
Cassandra.h: 4860: 45: ошибка: «org :: apache :: thrift» не был объявлен
Cassandra.h: 4860: 72: ошибка: ожидается ‘,’ или ‘...’ до токена ‘*’

Cassandra.h: 4935: 42: ошибка: thrift не является членом org :: apache
Cassandra.h: 4935: 42: примечание: предлагаемая альтернатива:
/usr/local/include/thrift/Thrift.h:75:37: примечание: "apache :: thrift"
Cassandra.h: 4935: 42: ошибка: thrift не является членом org :: apache
Cassandra.h: 4935: 42: примечание: предлагаемая альтернатива:
/usr/local/include/thrift/Thrift.h:75:37: примечание: "apache :: thrift"
Cassandra.h: 4935: 77: ошибка: неверный аргумент шаблона 1
Cassandra.h: 4935: 105: ошибка: thrift не является членом org :: apache
Cassandra.h: 4935: 105: примечание: предлагаемая альтернатива:
/usr/local/include/thrift/Thrift.h:75:37: примечание: "apache :: thrift"
Cassandra.h: 4935: 105: ошибка: thrift не является членом org :: apache
Cassandra.h: 4935: 105: примечание: предлагаемая альтернатива:
/usr/local/include/thrift/Thrift.h:75:37: примечание: "apache :: thrift"
Cassandra.h: 4935: 140: ошибка: неверный аргумент шаблона 1
Cassandra.h: В конструкторе ‘org :: apache :: cassandra :: CassandraProcessor :: CassandraProcessor (boost :: shared_ptr)’:
Cassandra.h: 4898: 49: ошибка: назначение местоположения только для чтения '' логин '[((org :: apache :: cassandra :: CassandraProcessor *) this) -> org :: apache :: cassandra :: CassandraProcessor: : processMap_]
Cassandra.h: 4898: 49: ошибка: невозможно преобразовать ‘void (org :: apache :: cassandra :: CassandraProcessor :: *) (int32_t, int) {aka void (org :: apach)

2

Решение

Добавьте следующие определения:

g++ -DHAVE_NETINET_IN_H -DHAVE_INTTYPES_H ...

Или добавить #include <stdint.h> перед включением Thrift.h в вашем коде.

Смотрите обсуждение на БЕРЕЖЛИВОСТЬ-1326. Проблема предположительно исправлена ​​в 0,9.

2

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

Похоже, ваша проблема — проблема компилятора.

Не удается найти тип «uint32_t»

Есть еще один вопрос на SO по этому поводу:

Ошибка: идентификатор uint32_t не найден

Цитируется от пользователя templatetypedef

Этот тип определен в заголовке C, который в настоящее время не
часть стандарта C ++. Согласно странице Википедии на
заголовок, он не поставляется с Visual Studio до VS2010.

В то же время, вы могли бы подделать свою собственную версию
заголовок, добавив typedefs, которые сопоставляют пользовательские целочисленные типы Microsoft с
типы, ожидаемые C. Например:

typedef __int32 int32_t; typedef unsigned __int32 uint32_t; / * …
и т.д. … * / Надеюсь, это поможет!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector