2010-06-11 44 views
7

Tôi muốn xác định cấu trúc, nơi một số hằng số toán học sẽ được lưu trữ.
Dưới đây là những gì tôi đã có bây giờ:Cấu trúc tĩnh trong C++

struct consts { 
    //salt density kg/m3 
    static const double gamma; 
}; 

const double consts::gamma = 2350; 

Nó hoạt động tốt, nhưng sẽ có hơn 10 hằng dấu chấm động, vì vậy tôi không muốn viết 'const tĩnh' trước mỗi trong số họ. Và xác định một cái gì đó như thế:

static const struct consts { 
    //salt density kg/m3 
    double gamma; 
}; 

const double consts::gamma = 2350; 

Nó trông tốt, nhưng tôi đã nhận các lỗi này:
1. hàm thành viên khai báo lại không được phép
2. thành viên dữ liệu không tĩnh có thể không được định nghĩa bên ngoài lớp học

Tôi tự hỏi nếu có bất kỳ cách nào C++ để làm điều đó?

+0

10 không nhiều. Chỉ cần copy-paste phần 'static const double'. –

+1

Tôi tin rằng sao chép-dán trong mã là một điều ác lớn nhất :) – Andrew

+3

Sao chép-dán __logic__ là một điều xấu xa. Sao chép-dán của const tĩnh đôi ... không quá nhiều. Nếu bạn cần 10 const, bạn cần khai báo chúng. – jmucchiello

Trả lời

27

Sử dụng không gian tên thay vì cố gắng tạo cấu trúc thành không gian tên.

namespace consts{ 
    const double gamma = 2350; 
} 

Phương pháp truy cập dữ liệu cũng có cùng một phương thức tương tự. Vì vậy, ví dụ:

double delta = 3 * consts::gamma; 
+0

Xin lỗi, tôi đã đóng dấu thay đổi của bạn: ( –

+0

@David Không có vấn đề gì, cảm ơn bạn đã chỉnh sửa. Tôi gần như đã bỏ lỡ sự thật là tôi đã quên đặt một loại ở đó. – Yacoby

+0

Cảm ơn, đó chính là điều tôi muốn :) – Andrew

10

Có vẻ như bạn thực sự chỉ muốn có một không gian tên:

namespace consts { 
    const double gamma = 2350.0; 
    // ... 
} 

Trừ tôi muốn cố gắng tìm ra một cái tên tốt hơn so với consts cho nó.

+0

Xin lỗi về việc chỉnh sửa, tôi đã nhấp vào nút sai. –