Я спрашиваю этот вопрос, и я до сих пор не могу решить проблему с моим проектом.
Мой проект использует стороннюю библиотеку, Клиент Hazelcast C ++.
Использование Hazelcast Client похоже на:
#include "hazelcast/client/HazelcastAll.h"
using namespace hazelcast::client;
int main(){
ClientConfig clientConfig;
Address address("192.168.85.34", 5701);
clientConfig.getNetworkConfig().addAddress(address);
HazelcastClient hz(clientConfig);
// do something...
hz.shutdown();
return 0;
}
Этот код не проблема. Больше примеров можно получить на своем сайте. Однако, если я хочу сделать HazelcastClient hz
как частный участник класса, я понятия не имею, чтобы создать экземпляр моего класса !!
Я проверил HazelcastClient
конструктор в Заголовок HazelcastClient.h, использование конструктора ClientConfig &config
в качестве параметра, который позволяет следующему коду вызвать ошибку вроде:
HzService.cpp: ошибка: невозможно связать неконстантную ссылку lvalue типа ‘hazelcast :: client :: ClientConfig&К значению типа «hazelcast :: client :: ClientConfig»
Это потому, что сообщение компиляции содержит 14282 строки, что слишком много для вставки сюда, поэтому я просто вставил важную ошибку выше!
Полную компиляцию сообщения можно скачать Вот.
#include "hazelcast/client/HazelcastAll.h"using namespace hazelcast::client;
class HzService {
public:
HzService();
virtual ~HzService();
private:
// Variables:
HazelcastClient hz_client;
// Functions:
ClientConfig createLocalConfig();
};
HzService::HzService()
:hz_client(createLocalConfig()){
}
HzService::~HzService() {
hz_client.shutdown();
}
ClientConfig HzService::createLocalConfig() {
ClientConfig clientConfig;
Address address("192.168.85.34", 5701);
clientConfig.getNetworkConfig().addAddress(address);
return clientConfig;
}
int main () {
HzService hs;
return 0;
}
Может быть, это не Hazelcast проблема, но вопрос, если я использую стороннюю библиотеку, что ее конструктор класса использует неконстантную ссылку в качестве параметров, как я могу сделать это в свой закрытый член класса?
Если проблема конкретно связана с Hazelcast, Я поменяю название.
РЕДАКТИРОВАТЬ:
Если кому-то нужно проверить код, пожалуйста, скачайте Клиент Hazelcast C ++ во-первых, и используйте следующую команду для компиляции (содержимое test.cpp является кодом выше):
g++ -std=c++11 \
-I/path/to/hazelcast-cpp-client/hazelcast/include \
-I/path/to/hazelcast-cpp-client/external/include/ \
-I/path/to/hazelcast-cpp-client/hazelcast/generated-sources/include \
test.cpp \
/path/to/hazelcast-cpp-client/release/libHazelcastClient3.11_64.a \
-lpthread
Вместо этого объявите hz_client как указатель.
Объявите ClientConfig как указатель, а также
В HzService () сначала создайте экземпляр clientconfig, затем создайте hz_client, передав в него экземпляр clientconfig.
Например.
class HzService
{
...
HazelcastClient* hz = nullptr; // but better with smart pointer and custom deleter.
std::unique_ptr<ClientConfig> cc;
...
HzService()
{
cc = std::make_unique<ClientConfig>();
Address address("192.168.85.34", 5701);
cc->getNetworkConfig().addAddress(address);
hz_client = new HazelcastClient(*cc.get());
}
затем добавьте код в деструктор, чтобы завершить работу и удалите hz_client
Других решений пока нет …