2015-12-05 3 views
0

Я не смог объявить массив строк в моем классе. Ниже мое определение класса:Невозможно объявить массив строк как член класса

class myclass{ 

    public: 
     int ima,imb,imc; 
     string luci_semaf[2]={"Rosso","Giallo","Verde"}; 
    }; 

и мой основной файл

#include <iostream> 
#include <fstream> 
#include "string.h" 
#include <string> 
using namespace std; 
#include "mylib.h" 
int main() { 

    return 0; 
} 

Почему я получаю следующие предупреждения/ошибки?

enter image description here

+2

C ≠ C++. Также, пожалуйста, отредактируйте свой вопрос, чтобы включить сообщение об ошибке, которое вы задаете * в качестве текста *, вместо крошечного изображения трех отдельных диагностических средств. –

ответ

3

Вы не можете инициализировать элемент данных. Вы можете написать так:

class myclass{ 
    public: 
     myclass() { 
      luci_semaf[0] = "Rosso"; 
      luci_semaf[1] = "Giallo"; 
      luci_semaf[2] = "Verde"; 
     } 
    private: 
     int ima,imb,imc; 
     string luci_semaf[3]; 
}; 

Вы можете присвоить значение массива в Сonstructor

+0

это работает для меня .... ty evgeniy ... Инициализировать переменную класса +1 – Phoenix

+0

Добро пожаловать) – Evgeniy331

+0

, но еще один вопрос: защищенный файл thestream, void creadata (string filename) {file.open ("txtfile/"filename" .txt ");} это не работает для меня, дайте мне ошибку16 [Error] expected ')' before 'filename' – Phoenix

1

Вы объявляя массив размером 2, но при условии 3 строки!

+0

, но все равно выдайте ошибку – Phoenix

+0

, но почему она все еще показывает предупреждение – Phoenix

+0

Поскольку вы используете функцию C++ 11, но вы не говорите компилятору использовать C++ 11. Добавьте опцию, предложенную в сообщении. – MikeCAT

5

У вас есть две проблемы: Во-первых, вы не можете инициализировать встроенный массив таким образом, вы должны использовать список инициализаторов конструктора. Вторая проблема заключается в том, что вы пытаетесь инициализировать массив из двух элементов с помощью трех элементов.

Чтобы инициализировать его, например,

class myclass{ 
public: 
    int ima,imb,imc; 
    std::array<std::string, 3> luci_semaf; 
    // Without C++11 support needed for `std::array`, use 
    // std::string luci_semaf[3]; 
    // If the size might change during runtime use `std::vector` instead 

    myclass() 
     : ima(0), imb(0), imc(0), luci_semaf{{"Rosso","Giallo","Verde"}} 
    {} 
}; 
+1

Вы можете инициализировать массив inline, как это, если вы используете C++ 11 или более позднюю версию, как следует из сообщения. – MikeCAT

1

Попробуйте сохранить элементы в векторе строк, в векторах C++ используются чаще.

class myclass{ 

    public: 
     int ima,imb,imc; 
     std::vector<std::string> strings; 
     myclass() { 
      strings.push_back("blabla"); 
     } 
    }; 
+0

Я использую использование пространства имен и что означает вектор строки, которые мы еще не сделали – Phoenix

+0

Это означает, что вы создаете вектор, в котором каждый элемент имеет строку типа. Все, что находится в <>, является аргументом шаблона. Узнайте больше на сайте C++ о всех функциях std. –

+0

Добавьте '#include ' в свой код, чтобы использовать 'std :: vector'. – MikeCAT

Смежные вопросы