Base class is undefined

0

Wprowadziłem nową klasę, która dziedziczy po dwóch innych,

CDoktorant.h

#pragma once
#include "stdafx.h"

class CDoktorant : public CStud2st, CProwadzacy  // tutaj mam błąd przy CStud2st "base class undefined"
{
public:
	CDoktorant(void);
	~CDoktorant(void);

protected:
	void printData(void);
}; 

klasę CStud2st używałem i jest sprawna, nie rozumiem jakim sposobem może być undefined?

CDoktorant.cpp

#pragma once
#include "StdAfx.h"
#include "CDoktorant.h"


CDoktorant::CDoktorant(void) : CStud2st(), CProwadzacy() {}

CDoktorant::~CDoktorant(void) {}

void CDoktorant::printData() {}
 

CStud2st.h

#pragma once
#include "stdafx.h"

class CStud2st : public CStudent
{
public:
	
	CStud2st(void);
	CStud2st(unsigned);
	~CStud2st(void);

	void sredniaStud();
	void sredniaWyswietl();
	
	friend std::istream& operator>>(std::istream&, CStud2st &);
	friend std::ostream& operator<<(std::ostream&, const CStud2st &); 

protected:
	
	std::string stNaukowy;
	double* tabSrednie;
};
 

stdafx.h

#pragma once


#include "CCzlowiek.h"
#include "CProwadzacy.h"
#include "CDoktorant.h"
#include "CStudent.h"
#include "CStud2st.h"

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string> 

przy okazji pliku stdafx.h, czy wie ktoś dlaczego MS Visual domyślnie odnosi się do tego pliku jako do "StdAfx.h" czyli dwie litery są duże?? np. kiedy tworze nową klasę to automatycznie robi include "StdAfx.h" nie kumam tego, przecież wielkość liter ma znaczenie, a ten plik w systemie istnieje jako stdafx.h, czyli wszytsko małymi literami?? O co to może chodzić?

0

Skoro w wierszu:
class CDoktorant : public CStud2st, CProwadzacy
używasz klas CStud2st, CProwadzacy to musisz dołączyć ich deklaracje.
Tak a propos to się zrobi jako:
class CDoktorant : public CStud2st, private CProwadzacy
ale może o to ci chodziło.

0

no ale przecież dołączam plik stdafx.h, w którym są deklaracje wszystkich klas. To nie wystarczy?
z tym private to faktycznie nie o to mi chodziło

a do klasy CProwadzacy, tez nie mam dołączonej deklaracji, a kompilator do niej się nie przyczepia?

0

stdafx.h spróbuj w takiej postaci:

#pragma once
 
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>

#include "CCzlowiek.h"
#include "CStudent.h"
#include "CStud2st.h"
#include "CProwadzacy.h"
#include "CDoktorant.h"
0

Właśnie o tym stdafx.h mówię on zawiera:

#include "CCzlowiek.h"
#include "CProwadzacy.h"
#include "CDoktorant.h" // jeszcze nic nie wiadomo o CStud2st
#include "CStudent.h"
#include "CStud2st.h"
0

przy okazji pliku stdafx.h, czy wie ktoś dlaczego MS Visual domyślnie odnosi się do tego pliku jako do "StdAfx.h" czyli dwie litery są duże?? np. kiedy tworze nową klasę to automatycznie robi include "StdAfx.h" nie kumam tego, przecież wielkość liter ma znaczenie, a ten plik w systemie istnieje jako stdafx.h, czyli wszytsko małymi literami??

To, czy wielkość liter w nazwach plików nagłówkowych będzie rozróżniania zależy od implementacji. Windows nie rozróżnia tych plików (chociaż NTFS może być case sensitive), więc preprocesor też nie - on pobiera plik o takiej nazwie i już, w Windowsie nie ma to znaczenia. Na innych systemach plików/systemach operacyjnych to już może mieć znaczenie.

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