Перейти к содержимому


- - - - -

Компилятор MSV 2008


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 MrArxi

MrArxi
  • Новичок

  • Пользователь
  • 34 сообщений

Отправлено 12.10.2009 - 21:20

Ребят вы уж извините меня, я просто новичок и сравнительно недавно начал изучать программирование.
Наткнулся на проблемы при компиляции, вот код
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
float f=13.3;
ostringstream stream;
stream<<f;
string S=stream.str();
cout<<S<<endl;
return 0;
}
если к примеру компилировать по ссылке http://codepad.org/sRBPcVu1   то все нормально работает корректно, елси в студии то вот какая ошибка выдается.
1>------ Построение начато: проект: 4546, Конфигурация: Debug Win32 ------
1>Компиляция...
1>4546.cpp
1>d:\c++\программы\4546\4546\4546.cpp(7) : warning C4305: инициализация: усечение из 'double' к 'float'
1>d:\c++\программы\4546\4546\4546.cpp(8) : error C2079: "stream" использует неопределенный class "std::basic_ostringstream<_Elem,_Traits,_Alloc>"
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>,
1>			_Alloc=std::allocator<char>
1>		]
1>d:\c++\программы\4546\4546\4546.cpp(9) : error C2297: <<: недопустимо, правый оператор имеет тип "float"
1>d:\c++\программы\4546\4546\4546.cpp(9) : warning C4552: <<: оператор не имеет результата; требуется оператор с побочным действием
1>d:\c++\программы\4546\4546\4546.cpp(10) : error C2228: выражение слева от ".str" должно представлять класс, структуру или объединение
1>		тип: int
1>d:\c++\программы\4546\4546\4546.cpp(11) : error C2679: бинарный '<<': не найден оператор, принимающий правый операнд типа 'std::string' (или приемлемое преобразование отсутствует)
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(653): может быть 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(700): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(738): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(785): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(909): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(916): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(923): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(930): или	   'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(170): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(176): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(183): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(190): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(210): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(243): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(263): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 int)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(288): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(308): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(328): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(349): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(369): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(390): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(410): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(430): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(450): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		c:\program files\microsoft visual studio 9.0\vc\include\ostream(470): или	   'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)'
1>		with
1>		[
1>			_Elem=char,
1>			_Traits=std::char_traits<char>
1>		]
1>		при попытке сопоставить список аргументов '(std::ostream, std::string)'
1>Журнал построения был сохранен в "file://d:\C++\Программы\4546\4546\Debug\BuildLog.htm"
1>4546 - ошибок 4, предупреждений 2
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Подскажите что не так? Я так понимаю проблемы в настройке студии, подскажите как настроить или ссылочку какую нибудь.(
Заранее всем спасибо.

Сообщение отредактировал MrArxi: 12.10.2009 - 21:21


#2 travanna

travanna
  • Пользователь

  • Пользователь
  • 136 сообщений

Отправлено 17.11.2009 - 20:04

codepad.org, как сказано в его разделе about, использует версию g++ 4.1.2 и использует недокументированную возможность, которая не работает в последующих релизах:

g++ 4.1.2:

Цитата

The (undocumented) extension which permitted templates with default arguments to be bound to template template parameters with fewer parameters has been deprecated, and will be removed in the next major release of G++. For example:

       template <template <typename> class C>
       void f(C<double>) {}

       template <typename T, typename U = int>
       struct S {};

       template void f(S<double>);
    

makes use of the deprecated extension. The reason this code is not valid ISO C++ is that S is a template with two parameters; therefore, it cannot be bound to C which has only one parameter.

g++4.2:

Цитата

The (undocumented) extension which permitted templates with default arguments to be bound to template template parameters with fewer parameters has been removed. For example:

template <template <typename> class C>
void f(C<double>) {}

template <typename T, typename U = int>
struct S {};

template void f(S<double>);
      

is no longer accepted by G++. The reason this code is not accepted is that S is a template with two parameters; therefore, it cannot be bound to C which has only one parameter.

http://gcc.gnu.org/g....1/changes.html
http://gcc.gnu.org/g....2/changes.html




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей