Błąd undefined reference do metod klasy bazowej

0

Posiadam nastepującą, uproszczoną strukturę kodu:

classes.h

class Base
{
	public:
		virtual ~Base();
		static void fun1();
	protected:
		Base();
};

class Derived : public Base
{
	public:
		inline virtual void fun1() { Base::fun1(); }
};

base_mock.h


#include <gmock/gmock.h>
#include "path/classes.h"

class MockBase : public Derived
{
	public:
		~MockBase() {}
		MOCK_METHOD0(fun1, void());
		
	protected:
		MockBase() {} 
}

Podczas buidowania base_mock.o otrzymuję następujące błędy:

undefined reference to Base::Base()
undefined reference to Base::~Base()
undifined reference to Base::fun1()
1

A definicje funkcji w Base gdzie?

0

W classes.cpp

0
#include "path/classes.h"

Czy to jest prawidłowa ścieżka do pliku classes.h?

0

Tak, w ide przekierowuje mnie do właściwego pliku classes.h.

0

Pytanie, czy classes.cpp widzi poprawnie plik classes.h. Wygląda na to, że nie widać definicji z piku implementacji.

0

W classes.cpp jest dołączony plik classes.h i w ide również przekierowuje mnie do właściwego pliku. Dodam jeszcze, że undifined reference dotyczy linii w classes.h powiązanych wyłącznie z klasą Derived.

Ps. Jeśli nie widzi mi definicji to czy jeśli dodam definicje atrapy w mocku, to będzie eleganckie rozwiazanie.?

0

@kronos998 Takie komunikaty powinny raczej wyskakiwać przy linkowaniu -- naprawdę masz to przy kompilowaniu pojedynczego pliku do postaci .o?

0

@koszalek-opalek: na pewno jest to przy linkowaniu. Autor najwyraźniej nie jako proces kompilacji rozumie troche zbyt dużo.

1
pingwindyktator napisał(a):

A definicje funkcji w Base gdzie?

nie ma ich i tyle

0

Fakt, to błąd linkera. Meotdy zostały zdefiniowane. Spotkałem tożsamy błąd undefined reference w innym mocku, ale dotyczył on jedynie metody statycznej. Definicje pozostałych metod klasy bazowej są widoczne. Nie mam jednak pomysłu dlaczego coś jest nietak przy metodach statycznych.

0

https://wandbox.org/ zamieść tutaj przykładowy kod, możesz dodawać pliki, pokaż dokładny use case to łatwiej będzie Ci pomóc/wyjaśnić

0
kronos998 napisał(a):

Fakt, to błąd linkera. Meotdy zostały zdefiniowane. Spotkałem tożsamy błąd undefined reference w innym mocku, ale dotyczył on jedynie metody statycznej. Definicje pozostałych metod klasy bazowej są widoczne. Nie mam jednak pomysłu dlaczego coś jest nietak przy metodach statycznych.

Jakby zostały zdefiniowane, to by linker je widział...

Kod możesz też wrzucić na githuba, będzie wygodnie przglądać i coś z nim robić...

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