2016-12-01 4 views
0

Ich versuche, eine dynamische Größe Array auf dem Stapel zu haben. Ich habe den folgenden CodeAktivieren Sie C++ 14 in Visual Studio 2015 cmake

int length = 0; 
getLength(&someVar, &length); 

char infoLog[length]; 

aber ich kann es nicht tun. Ich habe den Code ursprünglich auf macOS entwickelt und hatte kein Problem, ihn zu kompilieren. Ich habe etwas recherchiert und herausgefunden, dass C++ 14 dies unterstützt, aber ich bin mir nicht sicher, wie ich es in CMake (oder in der VS2015 Community Edition) anschalten soll.

Dank

EDIT: Wie drescherjm zeigte, dass es eigentlich nicht die Spezifikation aufgenommen. Hat es laut der Antwort unten getan.

+1

*** fand heraus C++ 14 unterstützt diese *** Ich bin mir ziemlich sicher, dass das falsch ist. https://www.reddit.com/r/cpp_questions/comments/3clm34/why_was_n3639_runtimesized_arrays_with_automatic/ – drescherjm

Antwort

3

Nein, C++ 14 unterstützt dies nicht.

Versuchen Sie, einen dynamischen Container anstelle:

std::vector<char> infoLog(length); 

Wenn Sie nach dem Erstellen Ändern der Größe nicht zulassen wollen (weil der VLA nicht), dann

auto infoLog = std::make_unique<char[]>(length); 

Beide werden Heap verwenden Speicherplatz, um den Inhalt zu speichern und automatisch freizugeben, wenn die Variable infoLog den Bereich verlässt.