"invalid null pointer" przy tworzeniu obiektu klasy

0

Witam,mam taki szablon klasy:

template <class T> class Dana
{
public:
	T x,y;
	Dana() : x(0),y(0){} //{x=0; y=0;}
	Dana(T _x) : x(_x){}
	Dana(T _x,T _y) : x(_x),y(_y){}
	//{x=_x;y=_y;}
}; 

Potem robię dziedziczenie:

class Tekst : public Dana<string>
{
public:
	Tekst(){x=""; y="";}
	Tekst(string s1) : Dana(s1){}
	int ro(Tekst s2)
	{
		return lev.odleglosc(this->x,s2.x);
	}

	bool operator ==(Tekst t){return (x==t.x);}
	bool operator <(Tekst t)
	{
		if(x<t.x)
			return true;
		return false;
	}
private:
	Levenshtein lev;
}; 

i mamy maina

int main()
{
	Tekst test; 

I nie ważne czy jestem w trybie debugowania czy nie zawsze wywala mi taki błąd:
user image

To nie jest wina klasy Levenshtein, której obiekt deklaruję w klasie pochodnej. Coś jest nie tak z konstruktorami, bo jak robię taką samą klasę jak Tekst ale, która nie dziedziczy po Dana, to błędu już nie wywala

1

Problem jest tu:

Dana() : x(0),y(0){} //{x=0; y=0;}

jeżeli x ,y są typu string to znaczy że wywołujesz konstruktor:

string x(0);

czyli przekazujesz wskaźnik NULL.
Rozwiązania:

  1. Utwórz specjalistyczny konstruktor domyślny dla Dana<string>
  2. Zapisz to tak:
Dana() : x(T()),y(T()) {}

Tak a propos to co podałeś nie może się skompilować, przez to:

Tekst(string s1) : Dana(s1) {}

powinno być:

Tekst(string s1) : Dana<string>(s1) {}
0

Dzięki. Faktycznie hula. Przeoczyłem głupi błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1