2013-01-03 12 views
7

Powiel możliwe:
Why does calling boost:split() give so many warnings?Ostrzeżenie z boost :: rozłamu podczas kompilacji

Tak, to jest mój kod:

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; 
} 

i to, co mam, kiedy próbując skompilować:

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' 

Moje pytanie brzmi: co zrobiłem źle? Co mogę zrobić, aby zapobiec tym błędom?

+2

Można wyłączyć to ostrzeżenie. –

+2

[To ostrzeżenie jest błędem w MSVC2012] (http://stackoverflow.com/questions/12618087/vs-11-d-scl-secure-no-warnings-in-vs-10-treated-as-errors-now). – rubenvb

Odpowiedz

11

Nie zrobiłeś nic złego. Visual Studio jest nadmiernie ostrożny. W trybie debugowania visual studio używa czegoś zwanego "Checked Iterators". Wskaźniki są również iteratorami, ale mechanizm sprawdzania nie działa z nimi. Kiedy więc standardowy algorytm biblioteczny jest wywoływany ze wskaźnikami, co jest tym, co robi boost::split, wydaje to ostrzeżenie.

Dostaniesz taką samą ostrzeżenie z tym oczywiście bezpiecznego kodu:

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

Wyłącz ostrzeżenie. To dla początkujących. Domyślnie jest włączony dla bezpieczeństwa początkujących, ponieważ gdyby był wyłączony domyślnie, nie wiedziałby, jak go włączyć.

+0

Dzięki, i gdzie mogę to wyłączyć? :) – Theolodis

+2

@ Theolodis: Dodaj '-D_SCL_SECURE_NO_WARNINGS' do linii poleceń. W IDE możesz przejść do "Project -> Properties -> C/C++ -> Command Line" i dodać go w polu opcji dodatkowych. –

+0

dziękuję, dziękuję! – Theolodis

1

Nie zrobiłeś nic złego i jeśli spojrzysz na ostrzeżenie, nie wydaje Ci się, że to straszne :) Ponadto wierzę, że w tym przypadku nie musisz wykonywać żadnych działań na tym.

Powiązane problemy