2013-01-03 28 views
7

thể trùng lặp:
Why does calling boost:split() give so many warnings?Cảnh báo với boost :: chia khi biên dịch

Vì vậy, đây là mã của tôi:

Account ParseString(string data){ 
    vector <string> fields; 
    boost::split(fields, data, boost::is_any_of("a,;")); 
    int limit = fields.size(); 
    for(int i = 0; i < limit; i++) 
     cout << fields[i] << endl; 
} 

và đây là những gì tôi nhận được khi đang cố gắng biên dịch:

d:\program files (x86)\visualstudio\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 

Câu hỏi của tôi là, tôi đã làm gì sai? Tôi có thể làm gì để ngăn chặn những thông báo lỗi đó?

+2

Bạn không thể tắt cảnh báo đó. –

+2

[Cảnh báo này là lỗi trong MSVC2012] (http://stackoverflow.com/questions/12618087/vs-11-d-scl-secure-no-warnings-in-vs-10-treated-as-errors-now). – rubenvb

Trả lời

11

Bạn chưa làm gì sai. Visual Studio đang quá thận trọng. Trong chế độ gỡ lỗi, studio trực quan sử dụng một cái gì đó gọi là "Kiểm tra Iterators". Con trỏ cũng là trình lặp, nhưng cơ chế kiểm tra không hoạt động với chúng. Vì vậy, khi một thuật toán thư viện chuẩn được gọi với con trỏ, đó là một cái gì đó mà boost::split hiện, nó phát hành cảnh báo này.

Bạn sẽ nhận được cảnh báo tương tự với mã rõ ràng là an toàn này:

int main() 
{ 
    int x[10] = {}; 
    int y[10] = {}; 
    int *a = x, *b = y; 
    std::copy(a, a+10, b); 
} 

Vô hiệu hóa các cảnh báo. Nó dành cho người mới bắt đầu. Nó được bật theo mặc định cho sự an toàn của người mới bắt đầu, bởi vì nếu nó đã được tắt theo mặc định, họ sẽ không biết làm thế nào để bật nó lên.

+0

Cảm ơn, và tôi có thể tắt nó ở đâu? :) – Theolodis

+2

@Theolodis: Thêm '-D_SCL_SECURE_NO_WARNINGS' vào dòng lệnh. Trong IDE, bạn có thể vào "Project -> Properties -> C/C++ -> Command Line" và thêm nó vào trường tùy chọn bổ sung. –

+0

cảm ơn rất nhiều nó hoạt động! – Theolodis

1

Bạn đã không làm gì sai và nếu bạn có một cái nhìn cảnh báo nó không có vẻ đáng sợ :) Ngoài ra tôi tin rằng trong trường hợp này bạn không cần phải thực hiện bất kỳ hành động trên đó.

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