Neues Formular über Button öffnen

StonedMind

Mitglied
Hallo,
ich programmiere eine GUI-Anwendung mit Visual C++ 2008 Express.

Was ich machen möchte:
Von meiner ersten Form aus (Form1) über einen Button ein anderes Formular öffnen (main_window);

Was ich bisher gemacht habe:
-main_window erstellt und nach meinen Vorstellungen gestaltet
-im Ereignis btn1_Click folgenden Quelltext eingefügt:

Code:
main_window^ haupt = gcnew main_window();
haupt->Show();

Hierbei erhalte ich folgende 5 Fehlermeldungen:
error C2065: 'main_window' : undeclared identifier
1>g:\andy\berufsschule\sae\projekt - datenbanken\leisa_odbc\leisa_odbc\leisa_odbc\Form1.h(226) : error C2065: 'haupt' : undeclared identifier
1>g:\andy\berufsschule\sae\projekt - datenbanken\leisa_odbc\leisa_odbc\leisa_odbc\Form1.h(226) : error C2061: syntax error : identifier 'main_window'
1>g:\andy\berufsschule\sae\projekt - datenbanken\leisa_odbc\leisa_odbc\leisa_odbc\Form1.h(227) : error C2065: 'haupt' : undeclared identifier
1>g:\andy\berufsschule\sae\projekt - datenbanken\leisa_odbc\leisa_odbc\leisa_odbc\Form1.h(227) : error C2227: left of '->Show' must point to class/struct/union/generic type

-Anschließend habe ich die "main_window.h" in meine "projektname.cpp" eingebunden:

Code:
#include "stdafx.h"
#include "main_window.h"
#include "Form1.h"
..
..

Jetzt sind die 5 Fehlermeldungen von oben weg, aber es sind 33(!) neue Fehlermeldungen dazugekommen:
\include\objidl.h(5934) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(251) : System::Windows::Forms::IDataObject IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5934) : error C3699: '*' : cannot use this indirection on type 'IDataObject'
1> compiler replacing '*' with '^' to continue parsing
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : error C2371: 'IDataObject' : redefinition; different basic types
1> C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(251) : see declaration of 'IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6110) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6123) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6136) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6171) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6184) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6282) : error C2872: 'IMessageFilter' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(263) : System::Windows::Forms::IMessageFilter IMessageFilter'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IMessageFilter'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6282) : error C3699: '*' : cannot use this indirection on type 'IMessageFilter'
1> compiler replacing '*' with '^' to continue parsing
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6328) : error C2371: 'IMessageFilter' : redefinition; different basic types
1> C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(263) : see declaration of 'IMessageFilter'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(12671) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(12677) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(12682) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(12688) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(12693) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(12700) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(374) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(1151) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(1157) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(3288) : error C2872: 'IDropTarget' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(173) : System::Windows::Forms::IDropTarget IDropTarget'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDropTarget'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(3288) : error C3699: '*' : cannot use this indirection on type 'IDropTarget'
1> compiler replacing '*' with '^' to continue parsing
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(3328) : error C2371: 'IDropTarget' : redefinition; different basic types
1> c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(173) : see declaration of 'IDropTarget'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(3332) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>c:\programme\microsoft sdks\windows\v6.0a\include\oleidl.h(3345) : error C2872: 'IDataObject' : ambiguous symbol
1> could be 'C:\Programme\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5948) : IDataObject'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
1>c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(96) : error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(53) : System::IServiceProvider IServiceProvider'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
1>c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(96) : error C3699: '*' : cannot use this indirection on type 'IServiceProvider'
1> compiler replacing '*' with '^' to continue parsing
1>c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(103) : error C2371: 'IServiceProvider' : redefinition; different basic types
1> c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(53) : see declaration of 'IServiceProvider'
1>c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(120) : error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
1>c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(235) : error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
1>c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(242) : error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\urlmon.h(5854) : error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
1>C:\Programme\Microsoft SDKs\Windows\v6.0A\include\urlmon.h(5856) : error C2872: 'IServiceProvider' : ambiguous symbol
1> could be 'c:\programme\microsoft sdks\windows\v6.0a\include\servprov.h(103) : IServiceProvider'
1> or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'

Damit kann ich absolut nichts anfangen.
Ich hab allerdings die Vermutung, dass ich etwas Wichtiges noch nicht inkludiert habe (oder so was Ähnliches). Muss ich vielleicht noch einen bestimmten Namespace-Eintrag tätigen?

MSDN sagt zu der ersten Fehlernummer(C2872): "The compiler cannot determine which symbol you are referring to" --> also dass mein Compiler nicht feststellen kann auf welches Symbol ich verweis

Allerdings habe ich keine einzige von diesen o.g. Dateien aus der Fehlermeldung angelangt.

Hoffe Ihr könnt mir helfen.

MfG
Andy
 

StonedMind

Mitglied
Hallo zusammen,

habe das Problem gelöst.

Ich hatte anfangs in meiner "projektname.cpp" oben folgendes stehen:

Code:
#include "stdafx.h"
#include "Form1.h"
#include <string>
#include "windows.h"

Habe die letzte Zeile("windows.h") entfernt. Und siehe da: es t, mein zweites Formular geht auf.

Trotzdem vielen Dank

MfG
Andy
 
N

Norbert128

Hi, ich weis, dass der Thread schon ewig alt ist aber evtl hilft es ja anderen daher meine Antwort! Ich hatte eben ein ähnliches Problem

Das einbinden von Header aus der WindowsApi unter CLI .Net muss gut durchdacht sein! Du brauchtest für deinen Fall die Windows.h garnicht. Aber wenn Datentypen etc. aus der WindowsApi verwendet werden müssen kommt man nicht drum herum! Gemäß dem Fall, dass du die Windows.h gebraucht hättest wäre die folgende Reihenfolge richtig gewesen:

Code:
#include "stdafx.h"
#include "windows.h"
#include "Form1.h"
#include <string>

Ein anderes Problem welches ich hatte:

Es sollten aus einer Inidatei Daten gelesen werden also habe ich den Namespace System::Runtime::InteropServices eingebunden einen Wrapper geschrieben und folgenden Code aufgerufen. der Namespace System::Runtime::InteropServices war direkt eingebunden ohne Verweis auf die konkrete Klasse. Das beisst sich auch unter umständen ich kam in der Datei WInbase.h raus bei der Struktur FILENAME

Code:
[DllImport("kernel32")]
	static int GetPrivateProfileString(String^ section,	String^ key, String^ def, StringBuilder^ retVal, int size, String^ filePath);


Lösung using... Namesapce entfernen und folgendes Schreiben, denn der Namespace InteropServices ist verdammt mächtig und kann sich bei falschem einbinden mit einigen WindowsApi Funktionen beißen.
Code:
[System::Runtime::InteropServices::DllImport("kernel32")]

Ich hoffe die Antwort hilft dem ein oder anderen weiter...