Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

main.h

Empfohlene Antworten

Veröffentlicht

Morgen,

ich wollte auf main.h zugreifen- finde diese aber nicht.:confused: Wenn ich ein Projekt neu baue, habe ich als Headerdatei nur stdafx.h. Wo ist mein main.h denn geblieben?

main.h ist kein besonderer Header. Es ist weder ein Standardheader, noch einer, der von VC automatisch angelegt wird. Du kannst deine eigenen Header nennen, wie du willst, main.h nimmt da keine Sonderstellung ein. Ich weiß nicht, worauf du zugreifen wolltest, aber da steht nichts drin, was du nicht selbst hineinschreibst.

Beschreib doch mal das Problem, nicht das, was du für die Lösung hältst ;)

Ich schreibe einen FTP-Clienten. Mit GetFtpConnection bekomme ich meinen Zeiger auf ein CInternetSession Objekt. Nun habe ich verschiedene Klassen zum Löschen, Runterladen, Hochladen...Bisher muss ich dann für jede dieser Funktionen/Klassen eine neue Verbindung aufbauen. Mein Ziel ist es, dass ich die Verbindung nur einmal aufbauen muss. Jetzt kann ich ja in einer anderen Klasse sagen

connection_pointer=Connect::getLastConnection();
Dann wird bloß jedes mal die Verbindung wieder aufgebaut. Connect.cpp
CFtpConnection* Connect::connection_pointer=NULL;

CInternetSession session((_T("My FTP Session")),1, INTERNET_OPEN_TYPE_PROXY ,

	                          (_T( "proxy")), NULL, 0);  


Connect::Connect(void)

{


	//Objekt session wird erzeugt


	//Zeiger auf CFtpConnection

	CFtpConnection *connection;

	//Objekt der Klasse read_serverlist wird erzeugt

	read_serverlist LeseListe;CFtpConnection * 

             		if(connection = session.GetFtpConnection(pstrServer, LeseListe.servername, LeseListe.password, port, bPassive)) 

			{

			cout << "Verbindung wurde aufgebaut\n";     

			connection_pointer=connection; 

			}


	}

Connect::getLastConnection() 

{ 

	return connection_pointer; 

}
Connect.h
class Connect : public read_serverlist

{

public:

	Connect(void);

	static CFtpConnection * Connect::getLastConnection(); 

	static CFtpConnection *connection_pointer;

	void give_connection(void);

public:

	~Connect(void);

};

Dann wird bloß jedes mal die Verbindung wieder aufgebaut.
Woraus schließt du das? Der Aufruf von getLastConnection kann das nicht bewirken. Es wird eine neue Verbindung aufgebaut, wenn du ein Connect-Objekt erstellst. Das solltest du natürlich nur einmal tun.

Und was hat das alles mit main.h zu tun?

Woraus schließt du das?
Ich habe in der Methode Connect eine Bildschirmausgabe mit eingebaut. Wenn ich nun
transfer_textfile(); delete_textfile();
aufrufe erhalte ich zwei Bildschirmausgaben. Lag wohl daran dass transfer_textfile von Connect abgeleitet ist. delete_textfile.h
class delete_textfile

{

public:

	delete_textfile(void);

public:

	~delete_textfile(void);

};
delete_textfile.cpp
delete_textfile::delete_textfile(void)

{		

			Connect();

			CFtpConnection* connection_pointer;

			connection_pointer=Connect::getLastConnection();


	        //Objekt der Klasse read_serverlist wird erzeugt

			read_serverlist LeseListe;

			//Textdatei wird gelöscht

			BOOL bWorking = connection_pointer->Remove

			(LeseListe.source_txt);

			if (bWorking)

				{

					cout << "Datei ist gelöscht worden";

				}


			else

				{

					cout << GetLastError();

				}





}
in transfer_textfile.cpp
transfer_textfile::transfer_textfile(void)

{	



	CFtpConnection* connection_pointer;


		read_serverlist LeseListe;



	connection_pointer=Connect::getLastConnection();

	CFtpFileFind finder(connection_pointer);

	try

	{

		//Verzeichnis wird gewechselt

		if(connection_pointer->SetCurrentDirectory(_T("automatic/get_bu")))								

		{

			cout<<"Verzeichnis wurde mit Erfolg! gewechselt\n";


			//Datei wird gesucht

			BOOL bWorking = finder.FindFile(_T("bu.txt"));

			if(bWorking)

				{ 

					//Datei wird vom  Server auf lokale Festplatte transferriert

					BOOL bGot = connection_pointer->GetFile(_T("bu.txt"),LeseListe.destination_txt,FALSE);

					if (bGot)

					{

						cout << "Transfer sollte erfolgt sein\n";

					}

					else

					{

						cout << GetLastError() << "\n";

					}

				}

						else

				{



						cout << "The File specified could not be found.!"<<GetLastError();

		}		}

					else

		{

			DWORD dwInfo = 0; 

			TCHAR puffer[250] = _T("");

			DWORD dwSize = sizeof(puffer) / sizeof(TCHAR);

			if( !InternetGetLastResponseInfo(&dwInfo, puffer, &dwSize) )

					{

						cout << GetLastError();

					    cout << "Aufruf InternetGetLastResponseInfo nicht erfolgreich";


			else

					{

						wcout << puffer;

						cout << "Aufruf InternetGetLastResponseInfo erfolgreich";

					}


		}

	}


	catch(CException* error)

    {

        TCHAR szCause[1024];

		error->GetErrorMessage(szCause,1024);

        printf_s("ERROR!  %S\n", szCause);

        error->Delete();

    }



}
transfer_textfile.h
class transfer_textfile : public Connect

{

public:

	transfer_textfile(void);


public:

	~transfer_textfile(void);

};

Und was hat das alles mit main.h zu tun?
Ich wollte in main.h eine Klasse Connect als Member erstellen, um dann darauf zugreifen zu können.

Bearbeitet von wulfgang
Problem vorerst geklärt

transfer_textfile.h

class transfer_textfile : public Connect
[/code]

Dadurch, dass transfer_textfile von Connect erbt, wird jedesmal, wenn du ein transfer_textfile-Objekt erstellst, der Connect-Konstruktor aufgerufen, der dann eine neue Verbindung erstellt.

Warum erbt transfer_textfile eigentlich von Connect? Public-Vererbung stellt eine "ist ein"-Beziehung dar. Ein "transfer_textfile" [i]ist ein[/i] "Connect"?

Ich wollte in main.h eine Klasse Connect als Member erstellen, um dann darauf zugreifen zu können.

Du musst gar nicht darauf zugreifen, du musst nur dafür sorgen, dass eine einzige Instanz erstellt wird. Der Zugriff geschieht über den statischen Zeiger, für den brauchst du keine Instanz der Klasse.

Ein "transfer_textfile" ist ein "Connect"?
Hat Beziehung wäre wohl besser. Habe die Vererbung bei transfer_textfile jetzt rausgenommen.


int _tmain(int argc, _TCHAR* argv[])

{	

	int warte;

	Connect();

	transfer_textfile();

	delete_textfile();

	cin >> warte;


	return 0;


}
delete.cpp habe ich jetzt auch geändert:
delete_textfile::delete_textfile(void)

{		


			CFtpConnection* connection_pointer;

			connection_pointer=Connect::getLastConnection();


	        //Objekt der Klasse read_serverlist wird erzeugt

			read_serverlist LeseListe;

			//Textdatei wird gelöscht

			BOOL bWorking = connection_pointer->Remove

			(LeseListe.source_txt);

			if (bWorking)

				{

					cout << "Datei ist gelöscht worden";

				}


			else

				{

					cout << GetLastError();

					DWORD dwInfo = 0; 

			TCHAR puffer[250] = _T("");

			DWORD dwSize = sizeof(puffer) / sizeof(TCHAR);

			if( !InternetGetLastResponseInfo(&dwInfo, puffer, &dwSize) )

					{

						cout << GetLastError();

					    cout << "Aufruf InternetGetLastResponseInfo nicht erfolgreich";

					}

			//Fehlerbehandlung falls InternetGetLastResponseInfo nicht aufgerufen werden konnte

			else

					{

						wcout << puffer;

						cout << "Aufruf InternetGetLastResponseInfo erfolgreich";

					}

				}

Das Problem: Wenn ich in delete_textfile den Konstruktor von Connect nicht ausführe bekomme ich die Meldung dass das File nicht gefunden wurde. Rufe ich aber erst delete_textfile(); und dann transfer_textfile(); aus funktioniert es. Ich bin noch nicht dahintergekommen wieso.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.