Witam! Rozważmy poniższe kody:
#include <iostream>
#include "klasa2.h"
using namespace std;
int main()
{
klasa2 *kl2=new klasa2;
kl2->wypisz();
kl2->wypisz3();
kl2->wypisz();
}
#ifndef klasa1_h
#define klasa1_h
#include<iostream>
using namespace std;
class klasa1
{
public:
string name;
};
#endif
#ifndef klasa2_h
#define klasa2_h
#include "klasa1.h"
#include "klasa3.h"
class klasa2
{
public:
klasa1 *obiekt=new klasa1;
klasa2();
void wypisz();
void wypisz3();
};
#endif
#include "klasa2.h"
klasa2::klasa2()
{
obiekt->name="Cześć";
}
void klasa2::wypisz()
{
cout<<obiekt->name<<endl;
}
void klasa2::wypisz3()
{
klasa3 *ob=new klasa3(obiekt);
ob->wypisz();
ob->set(obiekt);
}
#ifndef klasa3_h
#define klasa3_h
#include <iostream>
#include "klasa2.h"
using namespace std;
class klasa3
{
public:
klasa1 *ob=new klasa1;
klasa3(klasa1 *obiekt);
void set(klasa1 *obiekt);
string str;
void wypisz();
};
#endif
#include "klasa3.h"
klasa3::klasa3(klasa1 *obiekt)
{
ob=obiekt;
str="Elo";
}
void klasa3::set(klasa1 *obiekt)
{
obiekt=ob;
}
void klasa3::wypisz()
{
cout<<str<<endl;
ob->name="Witam";
cout<<ob->name<<endl;
}
Jest to uproszczony przykład mechaniki klas, które w różny sposób mają przekazywać i modyfikować pola i metody. Chcę to potem wykorzystać do większego projektu.
W programie Code::Blocks niby wszystko jest w porządku, wynik wyświetla się taki, jaki chciałem:
Cześć
Elo
Witam
Witam
Ale w Visual Studio Code terminal wyrzuca mi takie błędy dla pliku main.cpp:
undefined reference to `klasa2::klasa2()'
undefined reference to `klasa2::wypisz()'
undefined reference to `klasa2::wypisz3()'
undefined reference to `klasa2::wypisz()'
W którym miejscu popełniam błędy? Jakie to są błędy?