Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

default parameter dla funkcji template

Ostatnio zmodyfikowano 2015-07-22 12:11
Autor Wiadomość
tookie009
Temat założony przez niniejszego użytkownika
default parameter dla funkcji template
» 2015-07-21 12:03:08
czesc, mam taka oto malutka funkcje template:

C/C++
template < typename T >
// default-Argument nie dziala....
bool checkIfNotMultiple( T mapToCheck, const char * index, bool noError = 0 )
{
    if( mapToCheck.find( atoi( index ) ) != mapToCheck.end() && noError )
    {
        string error = "vielokrotne  IDs: ";
        error += index;
        log( error.c_str(), vielokrotne_ID );
    }
   
    return 1;
}

niestety jak chce ja wywolac musze zawsze defniowac 3. argument. Jestem nowy w templates i niestety nie moge tego zrobic tak, zeby zadzialalo. Ma ktos jakis pomysl?
P-134989
notabigthreat
» 2015-07-21 13:35:56
Jakie sa bledy/ostrzezenia? A jakie, gdy zamienisz
0
 na
false
?
Skoro jest jakis blad, po co wywolujesz ta funkcje?
P-134997
jankowalski25
» 2015-07-21 16:30:31
Domyślne wartości należy umieszczać w deklaracji, a nie w definicji jakiejkolwiek funkcji (nawet bez szablonów).
P-135028
tookie009
Temat założony przez niniejszego użytkownika
» 2015-07-22 07:36:40
@notabigthreat dostaje nastepujace powiadomienie o bledzie:


Invalid arguments '
Candidates are:
bool checkIfNotMultiple(#0, const char *, bool)
' DTInit.cpp /DataTransmitter/src line 11135 Semantic Error

@jankowalski
to teraz w headerze umieszczam dekalracje:

C/C++
template < typename T >
// default-Argument funktioniert leider nicht....
bool checkIfNotMultiple( T mapToCheck, const char * index, bool noError = 0 );


a w pliku .cpp definicje
C/C++
template < typename T >
// default-Argument funktioniert leider nicht....
bool DTInit::checkIfNotMultiple( T mapToCheck, const char * index, bool noError )
{
    if( mapToCheck.find( atoi( index ) ) != mapToCheck.end() )
    {
        if( !noError )
             return 0;
       
        string error = "Mehrfache IDs: ";
        error += index;
        log( error.c_str(), MEHRFACHE_ID );
    }
   
    return 1;
}


niestety dostaje ten sam blad co powyzej
P-135064
maly
» 2015-07-22 08:18:23
Cały szablon ma być w nagłówku i może posiadać domyślne wartości argumentów.
Pokaż z czym i jak wywołujesz tą funkcję.
P-135065
tookie009
Temat założony przez niniejszego użytkownika
» 2015-07-22 09:27:05
wywoluje ja tak:
C/C++
checkIfNotMultiple( iniValues->csv, iID->pItem, 1 );

iniValues->csv to jest objekt map
iID->pItem to ject char
i to 1 na koncu to jest flaga, ktora powinna okresla, czy jezeli notMultiple czy to jest blad czy jednak nie.
P-135067
maly
» 2015-07-22 10:04:24
Jeśli to zadziała, to znaczy że podajesz argumenty o złych typach.
C/C++
#include <map>

template < typename T >
bool checkIfNotMultiple( T mapToCheck, const char * index, bool noError = false )
{
    return false;
}

int main()
{
    std::map < int, int > m;
    checkIfNotMultiple( m, "afasfas" );
    return 0;
}
P-135068
Monika90
» 2015-07-22 10:04:36

Invalid arguments '
Candidates are:
bool checkIfNotMultiple(#0, const char *, bool)
' DTInit.cpp /DataTransmitter/src line 11135 Semantic Error
Który kompilator produkuje tak bezsensowne komunikaty o błędach?
P-135069
« 1 » 2
  Strona 1 z 2 Następna strona