INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Template Datentype mit decltype prüfen - error: cannot convert 'bool' to 'char*'
05.02.2021, 19:46 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2021 19:50 von flowmotion.)
Beitrag #1
Template Datentype mit decltype prüfen - error: cannot convert 'bool' to 'char*'
Hallo liebe Leute von heute!

Ich hab ein seltsames Problem welches mir einfach nicht eingehen will...

Ich habe eine Funktion geschrieben welches mir egal was für eine Variable übergeben wird es in char umwandelt. Das funktioniert auch soweit so gut. Nur bei bool scheitert es wie es scheint....
Eigentlich sollte er in der Funktion bei "return value" rausgehen aber beim compelieren schreit er auch für alle nachfolgenden if-statements....

Bei "if (is_same<bool, decltype(value)>::value) { char* vOut = value ? "true" : "false"; return vOut; }" sollte er aus der Funktion raus.


Meine Frage nun, übersehe ich da etwas Grundlegendes? Oder ist der Code einfach nur "kacke" ?

Fehler:
Code:
Compiling debug version of 'JuliansAnhaengerLedControll' for 'ATmega328P (Old Bootloader) (Arduino Nano)'

MemoryInfo.h:11: In file included from
Error compiling project sources
SwitchController.cpp:4: from
logger.h: In instantiation of char* logger::GetTypeofAndCovertToChar(T) [with T = bool]
Debug build failed for project 'JuliansAnhaengerLedControll'
logger.h:239: required from void logger  WriteLog(T, log_level) [with T = bool]
SwitchController.cpp:501: required from here

logger.h: 207:56: error: cannot convert 'bool' to 'char*' in return
   value) { return value; }
   ^~~~~

logger.h: 208:62: error: cannot convert 'bool' to 'char*' in return
   value) { return value; }
   ^~~~~

logger.h: 209:54: error: cannot convert 'bool' to 'char*' in return
   value) { return value; }
   ^~~~~

logger.h: 210:60: error: cannot convert 'bool' to 'char*' in return
   value) { return value; }
   ^~~~~

logger.h: 211:56: error: cannot convert 'bool' to 'char*' in return
   value) { return value; }
   ^~~~~

logger.h: 212:62: error: cannot convert 'bool' to 'char*' in return
   value) { return value; }
   ^~~~~


Code
Code:
template<typename T, typename U>   //Typen ungleich, gibt 0 zurück
struct is_same
{
    enum { value = 0 };
};

template<typename T>   //Typen gleich, gibt 1 zurück
struct is_same < T, T >
{
    enum { value = 1 };
};

template <typename T>
char* logger::GetTypeofAndCovertToChar(T value)
{
    if (is_same<byte, decltype(value)>::value) { char buffer[sizeof(byte) * 8 + 1];  itoa(value, buffer, 10); return buffer; }
    if (is_same<int, decltype(value)>::value) { char buffer[sizeof(int) * 8 + 1];  itoa(value, buffer, 10); return buffer; }
    if (is_same<unsigned int, decltype(value)>::value) { char buffer[sizeof(unsigned int) * 8 + 1];  utoa(value, buffer, 10); return buffer; }
    if (is_same<short, decltype(value)>::value) { char buffer[sizeof(short) * 8 + 1];  itoa(value, buffer, 10); return buffer; }
    if (is_same<unsigned short, decltype(value)>::value) { char buffer[sizeof(unsigned short) * 8 + 1];  utoa(value, buffer, 10); return buffer; }
    if (is_same<long, decltype(value)>::value) { char buffer[sizeof(long) * 8 + 1];  ltoa(value, buffer, 10); return buffer; }
    if (is_same<unsigned long, decltype(value)>::value) { char buffer[sizeof(unsigned long) * 8 + 1];  ultoa(value, buffer, 10); return buffer; }
    if (is_same<float, decltype(value)>::value) { char buffer[sizeof(float) * 8 + 1]; snprintf(buffer, sizeof buffer, "%f", value); return buffer; }
    if (is_same<double, decltype(value)>::value) { char buffer[sizeof(double) * 8 + 1]; snprintf(buffer, sizeof buffer, "%f", value); return buffer; }
    if (is_same<bool, decltype(value)>::value) { char* vOut = value ? "true" : "false"; return vOut; }
        if (is_same<char[], decltype(value)>::value) { return value; }
    if (is_same<const char[], decltype(value)>::value) { return value; }
    if (is_same<char, decltype(value)>::value) { return value; }
    if (is_same<const char, decltype(value)>::value) { return value; }
    if (is_same<String, decltype(value)>::value) { return value; }
    if (is_same<const String, decltype(value)>::value) { return value; }
}

template <typename T>
void logger::LnWriteLog(T value, log_level llevel)
{
    if (GetLogLevel() != disabled) { HandleLog(GetActualTimestamp(), GetTypeofAndCovertToChar<T>(value), llevel, false); }
}

template <typename T>
void logger::WriteLogLn(T value, log_level llevel)
{
    if (GetLogLevel() != disabled) { HandleLog(NULL, GetTypeofAndCovertToChar<T>(value), llevel, true); }
}

template <typename T>
void logger::WriteLog(T value, log_level llevel)
{
    if (GetLogLevel() != disabled) { HandleLog(NULL, GetTypeofAndCovertToChar<T>(value), llevel, false); }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2021, 17:53
Beitrag #2
RE: Template Datentype mit decltype prüfen - error: cannot convert 'bool' to 'char*'
Okey ich hab das ganze komplett umgebaut!...

scheint jetzt alles soweit zu gehen bis auf die Zahlenwerte... da kommt etwas ganz komisches raus.

Code:
Test1
Test2
Test3
true
false
╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠


Code:
template<class T>
struct item_return { typedef T type; };

template<class T>
typename item_return<T>::type convert_to(T from) { return T(from); }

template<>
struct item_return<int> { typedef char* type; };

template<>
inline char* convert_to<int>(int from) { char buffer[sizeof(int) * 8 + 1]; _itoa_s(from, buffer, 10); return buffer; }

template<>
struct item_return<bool> { typedef const char* type; };

template<>
inline const char* convert_to<bool>(bool from) { const char* vOut = from ? "true" : "false"; return vOut; }

template<>
struct item_return<unsigned int> { typedef char* type; };

template<>
inline char* convert_to<unsigned int>(unsigned int from) { char buffer[sizeof(unsigned int) * 8 + 1]; _itoa_s(from, buffer, 10); return buffer; }

template<>
struct item_return<short> { typedef char* type; };

template<>
inline char* convert_to<short>(short from) { char buffer[sizeof(short) * 8 + 1];  _itoa_s(from, buffer, 10); return buffer; }

template<>
struct item_return<unsigned short> { typedef char* type; };

template<>
inline char* convert_to<unsigned short>(unsigned short from) { char buffer[sizeof(unsigned short) * 8 + 1];  _itoa_s(from, buffer, 10); return buffer; }

template<>
struct item_return<long> { typedef char* type; };

template<>
inline char* convert_to<long>(long from) { char buffer[sizeof(long) * 8 + 1];  _ltoa_s(from, buffer, 10); return buffer; }

template<>
struct item_return<unsigned long> { typedef char* type; };

template<>
inline char* convert_to<unsigned long>(unsigned long from) { char buffer[sizeof(unsigned long) * 8 + 1];  _ultoa_s(from, buffer, 10); return buffer; }

template<>
struct item_return<float> { typedef char* type; };

template<>
inline char* convert_to<float>(float from) { char buffer1[sizeof(float) * 8 + 1]; snprintf(buffer1, sizeof buffer1, "%f", from); return buffer1; }

template<>
struct item_return<double> { typedef char* type; };

template<>
inline char* convert_to<double>(double from) { char buffer[sizeof(double) * 8 + 1]; snprintf(buffer, sizeof buffer, "%f", from); return buffer; }

template<>
struct item_return<char[]> { typedef char* type; };

template<>
inline char* convert_to<char[]>(char* from) { return from; }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.02.2021, 18:57
Beitrag #3
RE: Template Datentype mit decltype prüfen - error: cannot convert 'bool' to 'char*'
Thema ist obsolet! habe alles komplett umgebaut. Fehler ist jetzt etwas anderes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Prüfen, ob Schreibvorgang auf SD erfolgreich war. LK2567 2 267 27.03.2021 23:17
Letzter Beitrag: GuaAck
  Größe eines Char-Arrays ermitteln Karl Stanger 7 494 07.03.2021 18:01
Letzter Beitrag: Tommy56
  char return Werte sind komplett falsch flowmotion 8 795 12.02.2021 22:27
Letzter Beitrag: Tommy56
  const char zu int Konvertierung Problem Lumplux 1 295 02.02.2021 10:26
Letzter Beitrag: Lumplux
  Benötige dringende Hilfe bei CHAR DO3GE 4 634 07.10.2020 10:41
Letzter Beitrag: Tommy56
  Problem mit AnotherIFTTTWebhook | cannot convert 'const char*' to 'char*' dani 3 552 02.10.2020 11:21
Letzter Beitrag: dani
Question [Syntax]char * und char[ ..] sind doch eigentlich das Gleiche ManniP 3 563 27.09.2020 13:01
Letzter Beitrag: ManniP
  error: expected ',' or ';' before 'bme' Juljano 8 1.382 28.06.2020 19:54
Letzter Beitrag: Tommy56
  Mega & SIM800L - Rufnummer Empfänger von String zu Char kiximek 6 1.337 12.05.2020 07:02
Letzter Beitrag: kiximek
  String, char - und wie die Trennung eines Inputs vornehmen rev.antun 1 861 11.05.2020 20:01
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste