2012-04-07 17 views
8

uwzględniając program tak:Oczekiwano identyfikatora przed ciągiem stałym

#include <iostream> 
#include <string> 
using namespace std; 
class test 
{ 
public: 
    test(std::string s):str(s){}; 
private: 
    std::string str; 
}; 

class test1 
{ 
public: 
    test tst_("Hi"); 
}; 

int main() 
{ 
    return 1; 
} 

... dlaczego ja otrzymuję następujący kiedy wykonać

g ++ main.cpp

main.cpp:16:12: error: expected identifier before string constant 
main.cpp:16:12: error: expected ‘,’ or ‘...’ before string constant 
+1

Naprawdę powinieneś nauczyć się kompilować zawsze z 'g ++ -Wall -g' –

Odpowiedz

15

Nie możesz zainicjować tst_ tam, gdzie je zadeklarujesz. Można to zrobić tylko dla podstawowych typów stałych statycznych. Zamiast tego musisz mieć konstruktor dla test1.

EDYCJA: oto działający przykład w ideone.com. Zwróć uwagę na kilka zmian, które zrobiłem - najpierw lepiej jest, aby konstruktor testu wziął odwołanie do stałego ciągu, aby uniknąć kopiowania. Po drugie - jeśli program się powiedzie, powinieneś zwrócić 0, nie 1 (przy powrocie 1 pojawi się błąd runtime w ideone)

Powiązane problemy