No matching function for call to ..
От:
Igore
Дата: 04.05.11 14:42
Оценка:
Помогите разобраться почему не компилируется в mingw данный пример, в студии все нормально. Если использовать SumInClass то все хорошо, сейчас переношу исходники с MSVC 2008 на Qt4.7.2 и QtCreator, хочется переделывать как можно меньше.
#include <numeric>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
class TestClass
{
public :
typedef std::map<std::string, int > TMap;
TestClass()
{
map_["1" ] = 1;
map_["2" ] = 1;
map_["3" ] = 1;
}
~TestClass(){}
int sum()
{
struct Sum
{
int operator ()(const int & partial_value, const TMap::value_type& val) const
{
return partial_value + val.second;
}
};
return std::accumulate(map_.begin(), map_.end(), int (), Sum());
//return std::accumulate(map_.begin(), map_.end(), int(), SumInClass());
}
private :
TMap map_;
struct SumInClass
{
int operator ()(const int & partial_value, const TMap::value_type& val) const
{
return partial_value + val.second;
}
};
};
int main(int argc, char *argv[])
{
TestClass tc;
std::cout << tc.sum() << std::endl;
return 0;
}
Re: No matching function for call to ..
От:
Igore
Дата: 04.05.11 14:45
Оценка:
Полный текст ошибки
D:\source\test_console-build-desktop\..\test_console\main.cpp:32: error: no matching function for call to 'accumulate(std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >, std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >, int, TestClass::sum()::Sum)'
Re[2]: No matching function for call to ..
Здравствуйте, Igore, Вы писали:
2003 ISO/IEC
14.3.1/2: A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.
по стандарту предикат не может быть локальным классом
People write code, programming languages don't.
Re: No matching function for call to ..
Здравствуйте, Igore, Вы писали:
I>Помогите разобраться почему не компилируется в mingw данный пример, в студии все нормально. Если использовать SumInClass то все хорошо, сейчас переношу исходники с MSVC 2008 на Qt4.7.2 и QtCreator, хочется переделывать как можно меньше.
С -std=c++0x работает.
Неоконченная мысль всегда казалась Шри Япутре слишком
Re[2]: No matching function for call to ..
От:
Igore
Дата: 20.07.11 12:46
Оценка:
Здравствуйте, Kolobrodin, Вы писали:
K>Здравствуйте, Igore, Вы писали:
I>>Помогите разобраться почему не компилируется в mingw данный пример, в студии все нормально. Если использовать SumInClass то все хорошо, сейчас переношу исходники с MSVC 2008 на Qt4.7.2 и QtCreator, хочется переделывать как можно меньше.
K>С -std=c++0x работает.
Подниму свой старый пост, проблема та же, но в С++0х такое поведение разрешено
здесь , поэтому вопрос почему mingw не компилирует
Код
#include <numeric>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
int main(int argc, char *argv[])
{
std::map<std::string, int > map_;
map_["1" ] = 1;
map_["2" ] = 1;
map_["3" ] = 1;
struct Sum
{
int operator ()(const int & partial_value, const std::map<std::string, int >::value_type& val) const
{
return partial_value + val.second;
}
};
std::accumulate(map_.begin(), map_.end(), int (), Sum());
return 0;
}
pro файл
QT += core
QT -= gui
TARGET = 1
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
QMAKE_CXXFLAGS += -std=c++0x
Compile Output
Running build steps for project 1...
Configuration unchanged, skipping qmake step.
Starting: "C:/Qt/2010.05/mingw/bin/mingw32-make.exe " -w
mingw32-make: Entering directory `D:/source/test_console/1-build-desktop '
C:/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/source/test_console/1-build-desktop '
g++ -c -std=c++0x -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\2010.05\qt\include\QtCore" -I"c:\Qt\2010.05\qt\include" -I"c:\Qt\2010.05\qt\include\ActiveQt" -I"debug" -I"..\1" -I"." -I"c:\Qt\2010.05\qt\mkspecs\win32-g++" -o debug\main.o ..\1\main.cpp
mingw32-make[1]: Leaving directory `D:/source/test_console/1-build-desktop '
mingw32-make: Leaving directory `D:/source/test_console/1-build-desktop '
..\1\main.cpp: In function 'int main(int, char**)':
..\1\main.cpp:61: error: no matching function for call to 'accumulate(std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >, std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >, int, main(int, char**)::Sum)'
mingw32-make[1]: *** [debug/main.o] Error 1
mingw32-make: *** [debug] Error 2
The process "C:/Qt/2010.05/mingw/bin/mingw32-make.exe " exited with code %2.
Error while building project 1 (target: Desktop)
When executing build step 'Make'
Re[3]: No matching function for call to ..
От:
wander
Дата: 21.07.11 06:57
Оценка:
Здравствуйте, Igore.
g++ -v покажи.
Re[4]: No matching function for call to ..
От:
Igore
Дата: 21.07.11 07:06
Оценка:
Здравствуйте, wander, Вы писали:
W>Здравствуйте, Igore.
W>g++ -v покажи.
C:\Qt\2010.05\mingw\bin>gcc.exe -v
Using built-in specs.
Target: mingw32
Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,java,objc,obj-c++ --disable-sjlj-exceptions --enable-shared --enable-libgcj --ena
ble-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/r
oot --with-mpfr=/mingw/src/mpfr/root --build=mingw32
Thread model: win32
gcc version 4.4.0 (GCC)
Re[5]: No matching function for call to ..
Здравствуйте, Igore, Вы писали:
I>I>gcc version 4.4.0 (GCC)
http://gcc.gnu.org/projects/cxx0x.html
Local and unnamed types as template arguments N2657 GCC 4.5
ваша версия не поддерживает локальные типы в шаблонах
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить