2013-03-24 54 views
14

Tôi có một lớp học như:Lỗi: Gán cho một mảng từ một danh sách initializer

class dialog 
{ 
    public: 
    double dReturnType[][5][3]; 
}; 

 

#include <cstdlib> 
#include <iostream> 
include <string> 

using namespace std; 
#include "dialog.h"; 

int main(int argc, char *argv[]) 
{ 
    dialog People; 
    People.dReturnType[0][1] = {1.2,2.3,6.6}; 
    return 0; 
} 

Nó trả về:

[Warning] extended initializer lists only available with -std=c++11 or -std=gnu11 [enabled by default] [Error]: assigning to an array from an initializer list

Tôi đã nhìn nó lên mạng một chút và thực sự không thể tìm ra cách để giải quyết vấn đề này. Tôi không thích chỉnh sửa các lớp trong đó trên lớp tập tin (kinda đánh bại mục đích). Bất kỳ giúp đỡ?

Lưu ý: lớp là trong một file dự án riêng biệt

danh sách

Trả lời

18

Initializer chỉ có thể sử dụng trong quá trình khởi.

Nếu bạn muốn sử dụng std::initializer_list sau khi khởi tạo:

auto init = std::initializer_list<double>({1.2,2.3,6.6}); 
std::copy(init.begin(), init.end(), your_array); 
0

Bạn không thể khởi tạo một danh sách dài, trừ khi bạn đang ở trên C++ 11.

Và nếu tôi là bạn một thói quen tốt là sử dụng * thay vì trống "[]" và cấp phát bộ nhớ khi bạn biết kích thước (với mới hoặc malloc). dReturn loại trên chương trình của bạn là một con trỏ của matices.

Và bạn đang cung cấp danh sách đầy đủ cho chỉ một thành viên của vectơ.

People.dReturnType[0]={1.2,2.3,6.6}; 

Điều đó có ý nghĩa hơn.

Cố gắng đóng gói và sử dụng/tạo các hàm khởi tạo cũng sẽ giúp bạn thực hiện điều đó. C++ sẽ đặt tất cả 0 ở đầu, nhưng bạn có thể làm một hàm và gọi:

dialog People("the_atributes_are_here"). 

Đó là một tu tập tốt để làm cho tư nhân và sử dụng các chức năng dReturnType để acess nó dữ liệu và chèn/sửa đổi mọi thứ. Nhưng điều đó tùy thuộc vào bạn.

Các vấn đề liên quan