2016-11-14 2 views
-2

Ich schreibe C++ Code und ich verwende eine Struktur.Fehler: Lvalue erforderlich als unary '&' Operand beim Übergeben von Std :: String

struct Info_t { 
    cass_int64_t internal_id; 
    cass_double_t amount; 
    std::string client; 
} 

ich einen Zeiger auf diese Struktur in eine Funktion übergeben, und ich bin mit ihm wie dieses

get_string(row_by_name(row, "cl"), &info->client.c_str()); 

aber der Compiler beschwert sich mit Fehler „* Fehler: L-Wert als einstellige erforderlich‚&‘Operand "

Das dritte Argument der row_by_name sollte const char * sein und ich übergebe eine std :: string, die ich versuche, es mit c_str() char * zu machen. Was ist falsch?

+5

Warum sind Sie mit '&' da? – NathanOliver

+0

zeigen Sie die Definition von 'get_string' (und erklären, was es tut) –

Antwort

1

Um den Fehler zu entkommen nur

get_string(row_by_name(row, "cl"), info->client.c_str()); 

schreiben Sie gelten nicht Operator & auf temporäre Objekte. Dieser Ausdruck

info->client.c_str() 

hat bereits den Typ const char *.

Es ist jedoch nicht klar, was Sie erreichen möchten. Vielleicht sollten Sie den entsprechenden Parameter wie zB const std::string & deklarieren und als Argument das Objekt std::string selbst übergeben?

Wenn die entsprechenden Parameter wie const char deklarieren ** obwohl das seltsam ist, dann vor dem Argument übergeben müssen Sie dieses

const char * p = info-> Client eine Zwischengröße beispielsweise erklären. c_str();

und als Argument übergeben Ausdruck mit &p

+0

Vielleicht wäre eine Referenz besser, nein? – Charles

+0

Wenn ich & entferne, nehme ich immer noch Fehler: kann 'const char *' nicht in 'const char **' umwandeln – cateof

+1

@cateof Siehe meinen aktualisierten Beitrag. Aber ich denke, dass Sie im Allgemeinen etwas falsch machen. –

Verwandte Themen