J'ai posé cette question et je ne parviens toujours pas à résoudre le problème de mon projet.
Mon projet utilise une bibliothèque tierce, Hazelcast C ++ Client .
L'utilisation de Hazelcast Client est comme:
#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;
}
Ce code ne pose aucun problème. Plus d'exemples peuvent être obtenus sur son site Web . Cependant, si je veux créer en HazelcastClient hz
tant que membre privé de classe, je n'ai aucune idée d'instancier ma classe !!
J'ai vérifié le HazelcastClient
constructeur dans l'en -tête HazelcastClient.h , le constructeur utilise ClientConfig &config
comme paramètre, ce qui laisse le code suivant provoquer une erreur comme:
HzService.cpp: erreur: impossible de lier une référence lvalue non-const de type 'hazelcast :: client :: ClientConfig &' à une rvalue de type 'hazelcast :: client :: ClientConfig'
C'est parce que le message de compilation a 14282 lignes, ce qui est trop pour coller ici, donc je viens de coller une erreur importante ci-dessus! Le message de compilation complet peut être téléchargé ici .
#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;
}
Peut-être que ce n'est pas le problème Hazelcast , mais la question si j'utilise une bibliothèque tierce que son constructeur de classe utilise une référence non-const comme paramètres, comment puis-je en faire un membre privé de classe?
Si le problème est spécifiquement lié à Hazelcast , je changerai le titre.
ÉDITER:
Si quelqu'un a besoin de tester le code, téléchargez d'abord le client Hazelcast C ++ et utilisez la commande suivante pour compiler (le contenu de test.cpp est le code ci-dessus):
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
Déclarez hz_client comme pointeur à la place.
Déclarer ClientConfig comme pointeur également
Dans HzService (), créez d'abord l'instance clientconfig, puis créez hz_client en lui passant l'instance de clientconfig.
Par exemple
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());
}
puis ajoutez du code dans le destructeur pour arrêter et supprimer hz_client
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots