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: template < typename T >
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? |
|
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? |
|
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). |
|
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: template < typename T >
bool checkIfNotMultiple( T mapToCheck, const char * index, bool noError = 0 );
a w pliku .cpp definicje template < typename T >
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 |
|
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ę. |
|
tookie009 Temat założony przez niniejszego użytkownika |
» 2015-07-22 09:27:05 wywoluje ja tak: 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. |
|
maly |
» 2015-07-22 10:04:24 Jeśli to zadziała, to znaczy że podajesz argumenty o złych typach. #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; } |
|
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? |
|
« 1 » 2 |