Moin moin...
Ich habe mir eine "utils" Klasse gemacht, wo andere klassen drauf zugreifen sollen, wo bestimmte Funktionen drin sind, die über das gesamte Programm hier und da mal von untershiedlichen Klassen benutzt werden...
So jetzt habe ich da eine Template funktion din die ein string Array entgegen nehmen soll...
Soweit so gut... rufe ich doSomth innerhalb der utils auf kann ich die Funktion auch korrekt ansprechen (mit unterschiedlich großen string arrays)...
Aber wenn ich jetzt über eine andere klasse oder über die main.cpp diese Funktion aufrufen will, gibts beim Kompilieren einen fehler...
Zunächst mein aufruf:
Als Compile fehler kommt die meldung:
Lösche ich das aus der main.cpp und rufe doSomth() innerhalb der utils klasse auf:
Dann wird komplett durch kompiliert und die funktion macht das was sie soll.....
Warum?
Ich habe mir eine "utils" Klasse gemacht, wo andere klassen drauf zugreifen sollen, wo bestimmte Funktionen drin sind, die über das gesamte Programm hier und da mal von untershiedlichen Klassen benutzt werden...
So jetzt habe ich da eine Template funktion din die ein string Array entgegen nehmen soll...
Code:
class utils {
/* Schnipp */
template<size_t N>
void doSomth(const std::string (&lines)[N]);
}
Aber wenn ich jetzt über eine andere klasse oder über die main.cpp diese Funktion aufrufen will, gibts beim Kompilieren einen fehler...
Zunächst mein aufruf:
Code:
/* ne menge code vorweg..... bis irgendwann */
std::string myLines[] {
"test1", "test2", "test3", "test4"
}
utils u; // das objekt existiert bereits früher, dient nur zur veranschaulichung was u. ist
u.doSomth(myLines);
Als Compile fehler kommt die meldung:
Code:
main.cpp:(.text+0x102): Nicht definierter Verweis auf `void utils::doSomth()<2ul>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const (&) [2ul])'
collect2: error: ld returned 1 exit status
Lösche ich das aus der main.cpp und rufe doSomth() innerhalb der utils klasse auf:
Code:
void doMyDoSomth() {
std::string myLines[] {
"test1", "test2", "test3", "test4"
}
doSomth(myLines);
}
Dann wird komplett durch kompiliert und die funktion macht das was sie soll.....
Warum?