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 ..
От: Хвост  
Дата: 04.05.11 15:07
Оценка: 2 (2) +3
Здравствуйте, 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 ..
От: Kolobrodin Россия  
Дата: 04.05.11 21:00
Оценка:
Здравствуйте, 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 ..
От: uzhas Ниоткуда  
Дата: 21.07.11 07:23
Оценка: 1 (1)
Здравствуйте, 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
ваша версия не поддерживает локальные типы в шаблонах
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.