Wie eine std::mutex in einem Kontext einer Klasse

ich habe einige Schwierigkeiten mit einer C++11 std::mutex

in meiner Klasse habe ich eine variable namens semaphore vom Typ std::mutex.

So, ich positionierte meine semaphore.lock() und semaphore.unlock() vor und nach meiner kritischen Abschnitt

class Database {
public:
Database(string, string, string, string);
virtual ~Database();

struct sMyHome getMyHome(void);
struct sPhysical getPhysical(int);
struct sSystemInfo getSystemInfo(void);
void commitSystemInfo(struct sSystemInfo);
struct sTSensors getTSensors(int);
struct sWireless getWireless(int);
struct sWirelessConf getWirelessConf(int);
struct sWirelessStatus getWirelessStatus(int);

private:
void queryMyHome(void);
void queryPhysical(int);
void querySystemInfo(void);
void queryTSensors(int ID);
void queryWireless(int ID);
void queryWirelessConf(int ID);
void queryWirelessStatus(int ID);
string toString(int);

struct sMyHome MyHome;
struct sPhysical Physical[4];
struct sSystemInfo SystemInfo;
struct sTSensors TSensors[32];
struct sWireless Wireless[64];
struct sWirelessConf WirelessConf[64];
struct sWirelessStatus WirelessStatus[64];

MYSQL *connection;
mutex semaphore;
};

dies ist Teil der main, wo bekomme ich die Fehlermeldung:

 Database db = Database("192.168.1.10", "****", "******", "******");

aber der cross-compiler, sagt

../main.cpp:8:73: error: use of deleted function 'Database::Database(const Database&)'
  Database db = Database("192.168.1.10", "root", "raspberry", "DomoHome2");
                                                                     ^
In file included from ../main.cpp:2:0:
../Database.h:79:7: note: 'Database::Database(const Database&)' is implicitly deleted      because the default definition would be ill-formed:
 class Database {
   ^
../Database.h:79:7: error: use of deleted function 'std::mutex::mutex(const std::mutex&)'
 In file included from ../Database.h:12:0,
             from ../main.cpp:2:
/Volumes/rpi-crosscompiler-toolchain/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include/c++/4.8.2/mutex:128:5: error: declared here
 mutex(const mutex&) = delete;
 ^
make: *** [main.o] Error 1

und das ist mein Konstruktor:

Database::Database(string Address, string Username, string Password, string Database) {
//TODO Auto-generated constructor stub
connection = mysql_init(NULL);
mysql_real_connect(connection, Address.c_str(), Username.c_str(), Password.c_str(), Database.c_str(), 0, NULL, 0);
}
Sie versuchen zu kopieren Database Objekt, aber es ist nicht kopierbar. Wahrscheinlich, weil es hat eine mutex Daten Mitglied. Ich kann nicht sehen, warum die mutex sollte statisch sein, BTW.
Sie sind sich nicht genügend von Ihrem code. Die Fehlermeldungen sind schwer zu interpretieren, es sei denn, Sie bieten mehr code.
Sie sind nicht zeigt den relevanten code, und das ist ein problem in Ihr "code" (check this one). Aber trotzdem prüfen die verschiedenen auto-lock Funktionen von Standard zu sperren/entsperren Synchronisierung Elemente.
Hinzugefügt mehr code, hoffe, dass dies helfen, die situation zu klären
Aufrufen einer std::mutex semaphore macht es nicht. Ich würde dir empfehlen einen anderen Namen verwenden, im Falle dass eines Tages können Sie einen aktuellen semaphore zu Ihrem Programm, und jemand ruft völlig verwirrt...

InformationsquelleAutor Angelo Cassano | 2014-06-17

Schreibe einen Kommentar