Wpis z mikrobloga

#programowanie #cpp #visualstudio

error LNK2019: unresolved external symbol "public: __thiscall MojProjekt::mojenamespace::XmlParser::XmlParser(void)"
Mirki, dostaję bardzo dużo tego typu błędów. W projekcie mam headery, w których deklaruję kondruktory, destruktory, metody i zmienne prywatne, a także pliki cpp, gdzie wszystko to definiuję. W pliku, w którym chcę użyć tej klasy dostaję tego typu errory, które mówią jakobym nie zdefiniował konstruktorów. W czym jest problem, bo już nie mam pomysłu co mogę zmienić?
  • 9
@adek_es: Kliknij 2 razy na plik cpp i upewnij się, że kompilator wie, że ma go kompilować, tam jest jakaś taka opcja "file type" czy "build action", nie pamiętam.
Poza tym nie pisz using tylko definiuj te metody w namespace, bo using mówi, że możesz używać namespace'a w tym pliku, ale nie określa dokładnie gdzie go używasz, więce lepiej napisać:

namespace drEryk {
namespace domain {
XmlParser::XmlParser() {
//ciało konstruktora
}
@adek_es: Kończą mi się pomysły :-). Może ten konstruktor wcale nie jest public? Pamiętaj, że jeśli nie podałeś rodzaju dostępu w klasie to domyślnie jest private.
Ogólnie błąd który dostajesz polega na tym, że:
1) masz zadeklarowaną metodę - inaczej byłby inny błąd, na etapie kompilacji, a nie linkowania,
2) linker nie znalazł implementacji ten metody w żadnej jednostce kompilacji
czyli albo ta metoda w ogóle nie jest kompilowana, bo np.
@GwnBrz: Cóz, okazało się, że projekt, w którym używam parsera nie linkuje projektu w którym on jest implementowany, a wszystko jest linkowane dynamicznie. Dzięki jednak za pomoc, bo słusznie pisałeś, łap plusy ( ͡° ͜ʖ ͡°)