2013-03-05 14 views
6

Mam następujący kod:Dlaczego nie mogę utworzyć mojej tablicy (C++)?

#pragma once 

class Matrix{ 
public: 
    Matrix(); 
    ~Matrix(); 

protected: 
    float mat[3] = {0.0, 0.0, 0.0}; 
}; 

ale dostaję błąd na float mat[3] = {0.0, 0.0, 0.0};. Mówi błąd C2059: błąd składni: "{" i błąd C2334: nieoczekiwany token (y) poprzedzający "{'; pomijanie pozornego ciała funkcyjnego.

Utworzę tablicę poprawnie aint I? W czym więc jest problem?

+3

Działa to w C++ 11. – chris

+0

@chris naprawdę? nawet jeśli nie jest to stała statyczna całka? – David

+0

@Dave, Yup, sprawdź inicjalizację członków w klasie. Oto kilka [dowód] (http://liveworkspace.org/code/uww1n%240). – chris

Odpowiedz

11

C++ 03 nie obsługuje wbudowanej inicjalizacji pól elementów. Trzeba przenieść ten inicjalizacji do konstruktora, na przykład (link to a demo):

class Matrix{ 
public: 
    Matrix() : mat({0.0, 0.0, 0.0}) {}; 
    ~Matrix(); 

protected: 
    float mat[3]; 
}; 

Powyższe definiuje inline konstruktora; jeśli zdefiniujesz konstruktor osobno, przenieś listę inicjalizacji (tj. kod pomiędzy dwukropkiem : i nawiasem otwierającym {) razem z definicją konstruktora.

+3

Niemal przegłosowałem za to, że C++ go nie obsługuje :) Wygląda jednak na to, że Twój styl jest publikowany zaraz po rozpoczęciu pisania, a następnie kontynuujesz edycję :) –

+1

@ VladLazarenko Masz rację, zwykle opublikuję tak szybko, jak odpowiedź staje się pomocna, przynajmniej marginalnie. Dość często jest to wystarczające, aby uzyskać właściwy kurs. W pozostałe pięć minut przed zamknięciem edycji dodam więcej tekstu dla potencjalnych czytelników, którzy mogą znaleźć ten wpis przez Google. – dasblinkenlight

+0

@ VladLazarenko Nie rozpoczynać wojny w wyszukiwarkach, czy "cokolwiek innego", ale "Dlaczego nie mogę stworzyć mojej tablicy" jest na szczycie wyszukiwarki Google od tego czasu, a duckduckgo jeszcze jej nie znalazło :(Chyba to alternatywny sposób na powiedzenie "rozmiar ma znaczenie" – dasblinkenlight

7

C++ nie obsługuje non-static data member initializers do czasu ratyfikacji standardu C++ 11. Aby korzystać z tej funkcji, musisz mieć kompilator obsługujący C++ 11. Ponadto często jest on wyłączony domyślnie, więc prawdopodobnie będziesz musiał go włączyć ręcznie. W przypadku GCC określ std=c++11. W przypadku firmy Clang: -std=c++11 -stdlib=libc++. Jeśli używasz czegoś innego, sprawdź dokumentację.

Powiązane problemy