2016-06-01 17 views
5

mã lỗi là C2131.static constexpr char m_pszFoo [] = "*** FOO ***" có biểu thức lỗi biên dịch không đánh giá hằng số

intelisense không phàn nàn ngay cả khi tôi gọi kích thước của biến này trong các tệp khác intelisense biết kích thước. những gì tôi thiếu để có được điều này làm việc? Bất kỳ trợ giúp nào cũng được đánh giá rất cao. Trong pic dưới đây thấy intelisense không phàn nàn và cũng xác định kích thước.

enter image description here

dụ a.h:

class a 
{ 
private: 
static constexpr char m_pszFoo[] = "***FOO***"; // compile error on this line C2131 expression did not evaluate to a constant 

public: 
a() { sizeof(m_pszFoo); }; // no compile error here 
}; 

để tái tạo tất cả các bạn cần làm là bao gồm a.h trong bất kỳ tập tin khác. Nó sẽ không tái tạo mà không có sự bao gồm.

+0

@NathanOliver đã xác minh ví dụ trên trong msvc 2015 14.0.24720.00 cập nhật 1 – user1881587

+0

Tôi có thể xác nhận nó không biên dịch trong MSVS. Cả hai clang và gcc biên dịch. – NathanOliver

+0

thử tạo hàm tạo 'constexpr' –

Trả lời

4

Vì vậy, tôi đã đưa ra một công trình xung quanh b \ c mà thông báo lỗi đã làm cho nó có vẻ như tôi cần thêm một const đâu đó

static constexpr char const m_pszFoo[] = "**FOO***"; 

vì một lý do nếu chúng ta nói với trình biên dịch rằng chúng ta không nên có thể để thay đổi char mà chuỗi điểm msvc là hạnh phúc.

* Chỉnh sửa *

tôi có một số gợi ý để báo cáo lỗi với microsoft và để họ điều tra như thế này có vẻ là một lỗi interop với msvc. đây là liên kết connect.microsoft: https://connect.microsoft.com/VisualStudio/feedback/details/2781048

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