Probleme mit Linker



  • Hallo zusammen,

    ich habe ein Programm geschrieben und dieses funktioniert auch wenn ich dies kompiliere und teste, alles ohne Probleme.
    Um dies in eine graphische Oberfläche zu packen, habe ich heute eine MFC Anwendung mit VisualStudio 2010 programmiert.
    Nun möchte ich mein Programm auf einen Knopfdruck mit den Eingaben in die Oberfläche starten. Die Header und Source Dateien sind alle im selben Ordner, werden erkannt und compiliert. Wenn ich nun aber ein Objekt einer Klasse erstelle und dann kompiliere kommt folgender Fehlercode:

    GUI Drapiersimulation.obj : error LNK2028: Nicht aufgelöstes Token (0A000061) ""public: __clrcall RefPlane::~RefPlane(void)" (??1RefPlane@@$$FQAM@XZ)", auf das in Funktion ""public: __clrcall GUIDrapiersimulation::Form1::Form1(void)" (??0Form1@GUIDrapiersimulation@@$$FQAAM@XZ)" verwiesen wird. 1>GUI Drapiersimulation.obj : error LNK2028: Nicht aufgelöstes Token (0A000062) ""public: \_\_clrcall RefPlane::RefPlane(void)" (??0RefPlane@@FQAM@XZ)",aufdasinFunktion""public:__clrcallGUIDrapiersimulation::Form1::Form1(void)"(??0Form1@GUIDrapiersimulation@@FQAM@XZ)", auf das in Funktion ""public: \_\_clrcall GUIDrapiersimulation::Form1::Form1(void)" (??0Form1@GUIDrapiersimulation@@FQFQAAM@XZ)" verwiesen wird.
    1>GUI Drapiersimulation.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __clrcall RefPlane::~RefPlane(void)" (??1RefPlane@@$$FQAM@XZ)" in Funktion ""public: __clrcall GUIDrapiersimulation::Form1::Form1(void)" (??0Form1@GUIDrapiersimulation@@$$FQAAM@XZ)". 1>GUI Drapiersimulation.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: \_\_clrcall RefPlane::RefPlane(void)" (??0RefPlane@@FQAM@XZ)"inFunktion""public:__clrcallGUIDrapiersimulation::Form1::Form1(void)"(??0Form1@GUIDrapiersimulation@@FQAM@XZ)" in Funktion ""public: \_\_clrcall GUIDrapiersimulation::Form1::Form1(void)" (??0Form1@GUIDrapiersimulation@@FQFQAAM@XZ)".

    Ich habe den ganzen Nachmittag in Foren gestöbert, jedoch nichts gefunden, was mir nützt. Habe meine Klassen auch in eine *.lib verpackt, diese eingebunden und auch dem Compiler gesagt wo er sie findet usw. Wenn ich dies tue, dann findet er die Includes auf einmal nicht.

    Ich habe keine Ahnung was das ist und was ich falsch gemacht habe. Wenn ich die Klassen in eine main.cpp einbinde, funktioniert auch alles bestens, nur in dieser Oberfläche nicht.

    #pragma once
    #include <vector>
    #include "draped_grid.h"
    #include "RefPlane.h"
    #include "CutPlane.h"
    #include "plane_grid.h"
    #include <string> 
    #include <tchar.h> 
    #include <msclr/marshal.h> 
    #include <msclr\marshal_cppstd.h> 
    using namespace std;
    using namespace msclr::interop;
    
    namespace GUIDrapiersimulation {
    
    	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
    	{
    	public:
    		Form1(void)
    		{	RefPlane ref;
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    

    Das ist nur der obere Teil des Codes, alles andere ist zu unübersichtlich denke ich.

    Wenn ich jetzt z.B. eine Objekt der Klasse RefPlane mit

    RefPlane ref;
    

    initialisieren will kommt obige Fehlermeldung. Wenn ich

    RefPlane:: RefPlane ref;
    

    nehme, kommt

    c:\users\zzvihcp\documents\visual studio 2010\projects\gui drapiersimulation\gui drapiersimulation\Form1.h(706): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'ref'
    1>c:\users\zzvihcp\documents\visual studio 2010\projects\gui drapiersimulation\gui drapiersimulation\Form1.h(706): error C3867: "RefPlane::{ctor}": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&RefPlane::{ctor}", um einen Zeiger auf den Member zu erstellen.
    1>c:\users\zzvihcp\documents\visual studio 2010\projects\gui drapiersimulation\gui drapiersimulation\Form1.h(706): error C2065: 'ref': nichtdeklarierter Bezeichner

    Wie gesagt, überall anders funktioniert das, nur in diesem Fall nicht.
    Da ich nicht der Profi hier drin bin (ich bitte um Nachsicht ;)) würde ich mich über schnelle und konstruktive Hilfe freuen.

    MFG Gebb



  • Das ist kein MFC, das ist C++/CLI. Und wenn der Linker was nicht findet, machst du was falsch. Interessant wäre die RefPlane Klasse.



  • Ich habe jetzt einfach das im VisualStudio Projekt wo ich meine GUI programmiert habe die anderen Dateien neu erstellt und den Inhalt hineinkopiert. Nun funktionierts. Denke das hatte was mit den VisualStudio Projekten zu tun oder so. Anders kann ich mir das nicht vorstellen.

    LG



  • Bei "ref" Klassen musst Du (fast) immer "^" verwenden...
    Und siehe auch:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten