static const w strukturze, błąd expected constant expression

0

Cześć,

mam takie coś

struct str
{
    static const size_t jakiesCos= std::numeric_limits<uint16_t>::max;
    /*...*/
}; 

Lecz wywala błąd
Error 1 error C2057: expected constant expression

Nie wiem jak temu zaradzić. Mógłby ktoś podpowiedzieć? Z góry dzięki

1

brakuje ci () bo max jest funkcją! Poza tym, wkleiłeś chyba zły opis błędu, zawsze dawaj ten pierwszy!
http://ideone.com/PkMCGq

0

Dzięki za odp!

Skopiowałem kod z ideone do nowego pustego projektu i dalej mam ten błąd
Error 1 error C2057: expected constant expression

Mam visuala 2013 express jeżeli to coś zmienia

1

Bo dopiero od C++11 istnieje coś takiego jak constexpr. Włącz obsługę C++11 w ustawieniach Visuala.

EDIT: Jednak VS 2013 nie obsługuje constexpr. Zerknij tu: http://stackoverflow.com/questions/20264644/constexpr-not-compiling-in-vc2013

0

Wyczytałem, że visual jednak nie wie co to constexpr o.O
https://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx

Muszę hardcodować czy jest sposób, żeby użyć numeric_limits?

1
lukasz1235 napisał(a):

Włącz obsługę C++11 w ustawieniach Visuala

VS w ogole nie ma czegoś takiego jak "włączenie obsługi C++11". kolejne wersje obsługują coraz więcej elementów C++11 i C++14, ale nie ma żadnych włączników które trzeba specjalnie ustawiać.

0
#include <iostream>
#include <limits>

using namespace std;

struct str
{
    static const size_t jakiesCos;

	size_t test;
};

const size_t str::jakiesCos = std::numeric_limits<uint16_t>::max();

int main() {
	// your code goes here
	std::cout << str::jakiesCos;
}

Jeśli nie chcesz używać C++11, to należy "wyciągnąć" inicjalizację poza strukturę/klasę.

http://en.cppreference.com/w/cpp/language/constant_initialization

0

Chcę używać, ale visual nie pozwala :d

0

Ok, wersja która z całą pewnością pracuje dla VS 2013 Community Edition (nie mam Express)

#include <iostream>
#include <limits>
#include <cstdint>

using namespace std;

struct str {
	static const size_t jakiesCos;

	size_t test;
};

const size_t str::jakiesCos = numeric_limits<uint16_t>::max();

int main() {
	cout << str::jakiesCos;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1