none
label2 nicht deklariert & Links von "->Text"muss sich auf einen Zeiger... RRS feed

  • Frage

  • Hi,

    ich habe gerade folgendes Problem: bei meinem Programm kommen immer die Fehlermeldungen:

    1. error C2065: 'label2': nichtdeklarierter Bezeichner

    2. error C2227: Links von "->Text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.

    Ich weiß allerdings nicht woran das liegen könnte. Es ist bei mir folgendermaßen aufgebaut:

    Da es schlecht zu erklären geht, habe ich hier den Code für Euch (Ausschnitte damit es nicht allzugroß und unübersichtlich wird)

    Form1.h

    class CanEaSteuerung;
    
    namespace CAN {
    public ref class Form1 : public System::Windows::Forms::Form
    	{
    	private:
    		CanEaSteuerung *canEaSteuerung;
    	public:
    		Form1();
    		void ladeTreiber();
    }
    

    CAN.cpp (Hauptprojektdatei)

    #include "stdafx.h"
    #include "Form1.h"
    #include "CanEaSteuerung.h"
    
    using namespace CAN;
    using namespace System::Windows::Forms;
    
    Form1::Form1()
    {
    	InitializeComponent();
    	canEaSteuerung = new CanEaSteuerung();
    	ladeTreiber();
    }
    
    void Form1::ladeTreiber()
    {
    	label1->Text="test";
    }

    CanEaSteuerung.h

    #ifndef CanEaSteuerungH
    #define CanEaSteuerungH
    
    class CanEaSteuerung
    {
    public:
    	CanEaSteuerung();
    	void label2fkt();
    };
    #endif

    CanEaSteuerung.cpp

    #include "stdafx.h"
    #include "Form1.h"
    #include "CanEaSteuerung.h"
    
    using namespace CAN;
    using namespace System::Windows::Forms;
    
    CanEaSteuerung::CanEaSteuerung()
    {
    	label2fkt();
    }
    
    void CanEaSteuerung::label2fkt()
    {
    	label2->Text="test2";
    }

    Die Fehlermeldung tritt in der CanEaSteuerung.cpp auf beim label2... Form1 habe ich auch versucht in der CanEaSteuerung.h vorzudeklarieren, allerdings kommen dann noch mehr Fehlermeldungen, die das Erzeugen der Oberfläche betreffen...

    Kann mir da jemand behilflich sein und den Fehler zeigen?

    Mittwoch, 16. Januar 2013 09:46

Alle Antworten

  • Wenn die Form1.h nur das enthält, was Du uns gezeigt hast, dann fehlt da halt das "label2". Somit ist der Fehler logisch.

    Beachte bitte, dass Du verzweifeln wirst, wenn Du C++/CLI verwendest!!!

    Lies bitte dies hier und verwende C#!
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 16. Januar 2013 10:02
  • Hi,

    wo wird den "label2" deklariert und die Instanz erzeugt?

    Nachtrag: Hmmm. Ich habe trotz Aktualisierung Jochens Antwort erst nach dem Posten meiner Antwort zu Gesicht bekommen. Das Forum scheint derzeit wohl einige Probleme zu haben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 16. Januar 2013 11:32
    Moderator
  • Es ist nicht zu sehen, da ich es verkleinern wollte um es hier übersichtlicher zu machen...

    hier die komplette Form1.h

    #pragma once
    
    #include "windows.h"
    
    class CanEaSteuerung;
    
    namespace CAN {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	private:
    		CanEaSteuerung *canEaSteuerung;
    	public:
    		Form1();
    		void ladeTreiber();
    		
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Panel^  panel1;
    	protected: 
    	private: System::Windows::Forms::GroupBox^  groupBox1;
    	private: System::Windows::Forms::Label^  label8;
    	private: System::Windows::Forms::Panel^  panel8;
    	private: System::Windows::Forms::Label^  label7;
    	private: System::Windows::Forms::Panel^  panel7;
    	private: System::Windows::Forms::Label^  label6;
    	private: System::Windows::Forms::Panel^  panel6;
    	private: System::Windows::Forms::Panel^  panel5;
    	private: System::Windows::Forms::Label^  label5;
    	private: System::Windows::Forms::Label^  label4;
    	private: System::Windows::Forms::Panel^  panel4;
    	private: System::Windows::Forms::Label^  label3;
    	private: System::Windows::Forms::Label^  label2;
    	private: System::Windows::Forms::Panel^  panel3;
    	private: System::Windows::Forms::Panel^  panel2;
    	private: System::Windows::Forms::Label^  label1;
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->panel1 = (gcnew System::Windows::Forms::Panel());
    			this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());
    			this->label8 = (gcnew System::Windows::Forms::Label());
    			this->panel8 = (gcnew System::Windows::Forms::Panel());
    			this->label7 = (gcnew System::Windows::Forms::Label());
    			this->panel7 = (gcnew System::Windows::Forms::Panel());
    			this->label6 = (gcnew System::Windows::Forms::Label());
    			this->panel6 = (gcnew System::Windows::Forms::Panel());
    			this->panel5 = (gcnew System::Windows::Forms::Panel());
    			this->label5 = (gcnew System::Windows::Forms::Label());
    			this->label4 = (gcnew System::Windows::Forms::Label());
    			this->panel4 = (gcnew System::Windows::Forms::Panel());
    			this->label3 = (gcnew System::Windows::Forms::Label());
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->panel3 = (gcnew System::Windows::Forms::Panel());
    			this->panel2 = (gcnew System::Windows::Forms::Panel());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->groupBox1->SuspendLayout();
    			this->SuspendLayout();
    			// 
    			// panel1
    			// 
    			this->panel1->Location = System::Drawing::Point(6, 19);
    			this->panel1->Name = L"panel1";
    			this->panel1->Size = System::Drawing::Size(16, 16);
    			this->panel1->TabIndex = 0;
    			// 
    			// groupBox1
    			// 
    			this->groupBox1->Controls->Add(this->label8);
    			this->groupBox1->Controls->Add(this->panel8);
    			this->groupBox1->Controls->Add(this->label7);
    			this->groupBox1->Controls->Add(this->panel7);
    			this->groupBox1->Controls->Add(this->label6);
    			this->groupBox1->Controls->Add(this->panel6);
    			this->groupBox1->Controls->Add(this->panel5);
    			this->groupBox1->Controls->Add(this->label5);
    			this->groupBox1->Controls->Add(this->label4);
    			this->groupBox1->Controls->Add(this->panel4);
    			this->groupBox1->Controls->Add(this->label3);
    			this->groupBox1->Controls->Add(this->label2);
    			this->groupBox1->Controls->Add(this->panel3);
    			this->groupBox1->Controls->Add(this->panel2);
    			this->groupBox1->Controls->Add(this->label1);
    			this->groupBox1->Controls->Add(this->panel1);
    			this->groupBox1->Location = System::Drawing::Point(9, 6);
    			this->groupBox1->Name = L"groupBox1";
    			this->groupBox1->Size = System::Drawing::Size(174, 204);
    			this->groupBox1->TabIndex = 1;
    			this->groupBox1->TabStop = false;
    			this->groupBox1->Text = L"Binäre Daten";
    			this->groupBox1->Enter += gcnew System::EventHandler(this, &Form1::groupBox1_Enter);
    			// 
    			// label8
    			// 
    			this->label8->AutoSize = true;
    			this->label8->Location = System::Drawing::Point(32, 177);
    			this->label8->Name = L"label8";
    			this->label8->Size = System::Drawing::Size(35, 13);
    			this->label8->TabIndex = 15;
    			this->label8->Text = L"label8";
    			// 
    			// panel8
    			// 
    			this->panel8->Location = System::Drawing::Point(6, 177);
    			this->panel8->Name = L"panel8";
    			this->panel8->Size = System::Drawing::Size(16, 16);
    			this->panel8->TabIndex = 14;
    			// 
    			// label7
    			// 
    			this->label7->AutoSize = true;
    			this->label7->Location = System::Drawing::Point(32, 154);
    			this->label7->Name = L"label7";
    			this->label7->Size = System::Drawing::Size(35, 13);
    			this->label7->TabIndex = 13;
    			this->label7->Text = L"label7";
    			// 
    			// panel7
    			// 
    			this->panel7->Location = System::Drawing::Point(6, 154);
    			this->panel7->Name = L"panel7";
    			this->panel7->Size = System::Drawing::Size(16, 16);
    			this->panel7->TabIndex = 12;
    			// 
    			// label6
    			// 
    			this->label6->AutoSize = true;
    			this->label6->Location = System::Drawing::Point(29, 131);
    			this->label6->Name = L"label6";
    			this->label6->Size = System::Drawing::Size(35, 13);
    			this->label6->TabIndex = 11;
    			this->label6->Text = L"label6";
    			// 
    			// panel6
    			// 
    			this->panel6->Location = System::Drawing::Point(6, 131);
    			this->panel6->Name = L"panel6";
    			this->panel6->Size = System::Drawing::Size(16, 16);
    			this->panel6->TabIndex = 10;
    			// 
    			// panel5
    			// 
    			this->panel5->Location = System::Drawing::Point(6, 108);
    			this->panel5->Name = L"panel5";
    			this->panel5->Size = System::Drawing::Size(16, 16);
    			this->panel5->TabIndex = 9;
    			// 
    			// label5
    			// 
    			this->label5->AutoSize = true;
    			this->label5->Location = System::Drawing::Point(29, 108);
    			this->label5->Name = L"label5";
    			this->label5->Size = System::Drawing::Size(35, 13);
    			this->label5->TabIndex = 8;
    			this->label5->Text = L"label5";
    			// 
    			// label4
    			// 
    			this->label4->AutoSize = true;
    			this->label4->Location = System::Drawing::Point(29, 86);
    			this->label4->Name = L"label4";
    			this->label4->Size = System::Drawing::Size(35, 13);
    			this->label4->TabIndex = 7;
    			this->label4->Text = L"label4";
    			// 
    			// panel4
    			// 
    			this->panel4->Location = System::Drawing::Point(6, 85);
    			this->panel4->Name = L"panel4";
    			this->panel4->Size = System::Drawing::Size(16, 16);
    			this->panel4->TabIndex = 6;
    			// 
    			// label3
    			// 
    			this->label3->AutoSize = true;
    			this->label3->Location = System::Drawing::Point(29, 63);
    			this->label3->Name = L"label3";
    			this->label3->Size = System::Drawing::Size(35, 13);
    			this->label3->TabIndex = 5;
    			this->label3->Text = L"label3";
    			// 
    			// label2
    			// 
    			this->label2->AutoSize = true;
    			this->label2->Location = System::Drawing::Point(29, 41);
    			this->label2->Name = L"label2";
    			this->label2->Size = System::Drawing::Size(35, 13);
    			this->label2->TabIndex = 4;
    			this->label2->Text = L"label2";
    			// 
    			// panel3
    			// 
    			this->panel3->Location = System::Drawing::Point(6, 63);
    			this->panel3->Name = L"panel3";
    			this->panel3->Size = System::Drawing::Size(16, 16);
    			this->panel3->TabIndex = 3;
    			// 
    			// panel2
    			// 
    			this->panel2->Location = System::Drawing::Point(6, 41);
    			this->panel2->Name = L"panel2";
    			this->panel2->Size = System::Drawing::Size(16, 16);
    			this->panel2->TabIndex = 2;
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(29, 20);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(35, 13);
    			this->label1->TabIndex = 1;
    			this->label1->Text = L"label1";
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(190, 216);
    			this->Controls->Add(this->groupBox1);
    			this->Name = L"Form1";
    			this->Text = L"Can";
    			this->groupBox1->ResumeLayout(false);
    			this->groupBox1->PerformLayout();
    			this->ResumeLayout(false);
    
    		}
    #pragma endregion
    	private: System::Void groupBox1_Enter(System::Object^  sender, System::EventArgs^  e) {
    			 }
    };
    }
    

    Mittwoch, 16. Januar 2013 12:08
  • Du musst die Deklaration Deiner Methode in Form1.h machen und die Implementierung dann in Form1.cpp!
    Dann geht es.

    Aber bitte: mach das nicht in C++/CLI. Du wirst verzweifeln.... aber es gibt ja Leute, die sich selbstkasteien...

    In VS2012 wäre es gar nicht mehr möglich so ein Projekt zu machen, da die Projektvorlage für Windows-Forms entfernt wurde.
    Ich würde mir es also wirklich ernsthaft überlegen, dies nicht lieber in C# zu machen... das ist eine Sackgasse was Du hier machst...


    Jochen Kalmbach (MVP VC++)
    Mittwoch, 16. Januar 2013 12:24
  • Alles klar, vielen Dank. Dann werd ich wohl auf C# umsteigen müssen... oder ist es mit wxwidgets evtl. geschickter?
    Freitag, 18. Januar 2013 12:41
  • Es kommt darauf an, was Du machen willst....

    Wenn es mehr Oberflächen lastig ist, dann würde ich WinForms oder WPF nehmen. Falls es eine C#-Bibliothek für CAN gibt, sofort nur noch C#...


    Jochen Kalmbach (MVP VC++)
    Freitag, 18. Januar 2013 14:02
  • Nachtrag: Hmmm. Ich habe trotz Aktualisierung Jochens Antwort erst nach dem Posten meiner Antwort zu Gesicht bekommen. Das Forum scheint derzeit wohl einige Probleme zu haben.

    Hallo Stefan,

    Ja es gibt Probleme mit den Foren seit dem letzten Update:

    Besteht Problem mit der Aktualisierung der Foren ?

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 21. Januar 2013 14:03
    Moderator
  • Hallo DidiTitte,

    Vielen Dank für Deine Frage und Beitrag!

    Ich möchte Dich bitte folgendes lesen und die Beiträge die Dir geholfen haben zu bewerten. Vielen Dank.

    Nutzen Sie die Bewertungsfunktionen ("Antwort" und "Hilfreich") in den MSDN Foren! Unter anderem können andere später eine Lösung schneller finden. Es ist also wünschenswert, dass die fragenden (Benutzer) die Beiträge anderer Beantworter bewerten. Hier dazu die wichtigsten Anhaltspunkte aus den Forenregeln und FAQs.

    Lösungsbeiträge als „Die Antwort“ markieren
    Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen. [Quelle: Forenregeln]

    Bitte markiere den/die Beiträge als Antwort, die dir geholfen haben, dein Problem zu lösen. Das ist zum einen eine Anerkennung für die Autoren dieser Beiträge, zum anderen hilft es zukünftigen Lesern, sich in diesem Thread besser zu orientieren und Antworten auf ihre Fragen schneller zu identifizieren.

    Wie zeige ich an, dass meine Frage durch einen Beitrag beantwortet wurde?

    Wie bewerte ich einen Beitrag als hilfreich? Um einen Beitrag als hilfreich zu bewerten, klicken Sie in einem beliebigen Beitrag auf Als hilfreich bewerten. Sie können Ihre Stimme nur einmal für einen Beitrag abgeben. [Quelle:
    Häufig gestellte Fragen]

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-PrinzipEntwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 21. Januar 2013 14:06
    Moderator