Hallo,
ich habe folgendes Problem:
Zunächst habe in einer .lib eine Klasse aP. Dann habe ich in einer .dll die Klasse M, welche von aP abgeleitet wird. In der .dll gibt es eine Funktion GetInstance() die die Adresse eines Objektes der Klasse M zurückgibt.
In einer weiteren Klasse T habe ich einen Zeiger vom aP dem ich über den Aufruf der GetInstance() Funktion ein Objekt der Klasse M zuweise.
Dieses Objekt übergebe ich einer weiteren Klasse A, welche es einem Zeiger pt vom Typ aP zuweist.
Wenn ich nun aus der Klasse A pt->Funktion von aA (dort virtuell aber in M implementiert) zugreife und dort einen Haltepunkt setze, kennt VS2005 nicht mal mehr den this Zeiger, es weiss also nicht mehr in welchem Objekt es sich befindet. Wie kann sowas passieren????? An der Stelle von pt->... weisst pt noch eindeutig auf die Adresse, welche die GetInstance() Funktion zurückgab.
Wie kann dies plötzlich verschwinden?
Ich hab schon ewig gesucht ich kapier es nicht, denn wenn ich beim Erzeugen des M Objektes einen Haltepunkt im Konstruktor setze, kennt er auch den this Zeiger. Wieso kennt er ihn nicht mehr, wenn ich ein zweites mal eine Fuktion von aP aufrufe.
Danke.
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
@abc.w: Du hast doch aber die LIBs einfach verwendet, oder? Mein Problem ist eher, dass ich die Bibliotheken dem Linker übergebe und trotzdem "undefined references" erhalte. Mir ist aber neu, dass verschiedene Compiler auch verschiedene Headerfiles brauchen. Leuchtet zwar irgendwie ein, aber bisher hatte ich eigentlich immer nur einen Satz Header und wahlweise ".lib"- oder ".a"-Bibliotheken.
abc.w schrieb:
Habe es nun aufgegeben, mit mingw zu kompilieren. [...] Es scheint doch einfacher zu sein, Visual Studio 2008 mit dem Microsoft Compiler zu verwenden...
Aber scheinbar bist du zu einem ähnlichen Ergebnis gekommen wie ich. Übrigens fiel meine Wahl jetzt auf Code::Blocks in Verbindung mit dem MS-Compiler.
Sorry aber habe nun selbst eine Lösung gefunden. Der Linkerfehler trat bei mir in einer von A abgeleiteten Klasse auf. Für dieses Projekt habe ich eine Abhängigkeit zum Projekt der Klasse T hinzugefügt und nun geht es.
Danke an alle die Beitrag gelesen udn nach einer Lösung gesucht haben.
Schön, wenn man die Lösung selber findet: Ich habe nach viel gegoogle heraugefunden, dass man unter C/C++ Build -> Settings -> Binary Parsers den Parser umstellen kann. MIt dem PE WIndows Parser klappts. Keine Ahnung warum das so ist.
So, ich habs jetzt hinbekommen. Die Funktion "Exclude from Build..." hat doch gezogen. Unter C/C++ Build -> Settings -> Build Steps kann man Pre-build steps angeben. Jetzt muss ichs nur noch hinkriegen, dass er mit dem restl. Build wartet bis der Precompiler fertig ist.
Code::Blocks ist glaub' ich auch wesentlich kleiner (mal zum probieren) und es sind nicht immer so viele unbekannte Files im Ordner drin (was mich persönlich ein bisschen nervt)
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Und gleich noch das nächste CMake Problem:
string(REGEX REPLACE
"([a-z]+)"
"\\1;"
RESULT
"hello world")
# gibt "hello world" aus, sollte "hello; world;" sein
message(${RESULT})
Mit z.B. einem Doppelpunkt statt dem Semikolon funktioniert alles wie erwartet. Ich nehme an, das liegt daran, dass CMake das Semikolon hier als Listen-Trenner interpretiert. Aber wie behebe ich das ganze jetzt? Maskieren mit \ oder \\ führt nur zur Fehlermeldung Unknown escape "\;"
Hallo zusammen,
ich versuche gerade eine aus dieser Skriptdatei
# This is the root ITK CMakeLists file.
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)
# This project is designed to be built outside the Insight source tree.
PROJECT(HelloWorld)
# Find ITK.
FIND_PACKAGE(ITK REQUIRED)
INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(HelloWorld HelloWorld.cxx )
TARGET_LINK_LIBRARIES(HelloWorld ITKCommon)
und dieser cxx-datei
#include "itkImage.h"
#include <iostream>
int main()
{
typedef itk::Image< unsigned short, 3 > ImageType;
ImageType::Pointer image = ImageType::New();
std::cout << "ITK Hello World !" << std::endl;
return 0;
}
mit CMake 2.8.0 ein VS2008 Projekt zu erstellen. Ich gebe als Verzeichnis der Quelle das Verzeichnis meiner Skript- und cxx-Datei an und stelle den gewünschten Compiler auf VS2008 und wähle die Option "Use Default Native Compilers".
Leider bleibt CMake jedesmal gleich am Anfang hängen. Ich erhalte keine Fehlermeldung oder Warnung, es wird mir nur folgende Zeile angezeigt:
Check for working C compiler: cl
Weiß jemand woran das liegen könnte? Ich bin für jede Hilfe dankbar!
Mit freundlichen Grüßen,
hoschie211
Befehlszeile?
1. Du kannst einen Batchfile schreiben.
2. Eine Befehlszeilen-Fenster öffnen.
3. Die Sourcesafe Doku lesen:
http://msdn.microsoft.com/en-us/library/7d9sd5y2(VS.80).aspx
Senmeis schrieb:
error C318: can't open file 'target.h'
wobei "#include "target.h"" bezogen ist.
Was habe ich falsch gemacht?
Entweder #include <target.h>
Oder #include "verzeichnis1/verzeichnis2/-undsoweiter-/verzeichnisn/target.h"
Oder relativ #include "../../verz1/verz2/target.h"
Evtl. fehlt dir noch das Service Pack 1 für .NET 3.5: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7
Edit: und wenn du das VS dann installiert bekommst, zieh dir am besten gleich noch auch hierfür das SP1: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e
Hallo,
ich ärger mich gerade bei CMake damit rum, einen Generator einzubinden, welche Sourcecode für ein Target ausspuckt.
Problem dabei ist, dass ich nicht genau weis, welche Dateien generiert werden, allerdings kann ich die entsprechenden Dateien über die Namen rausfiltern.
Das Suchen nach den entsprechenden Dateien ist allerdings ein Problem, weil die Targets mitunter gebaut werden nachdem die entsprechende Variable belegt wurde.
kleines Beispiel:
# eigentlich wäre ja add_custom_command gefragt, aber ich kenne ja die OUTPUT Dateien nicht
add_custom_target(
generated
COMMAND myGenerator)
# das wird wohl vor dem Erstellen des generated-Targets ausgeführt
file(GLOB GENERATED*.cc SOURCE)
add_library(
mylib
${SOURCE})
add_dependencies(mylib generated)
Mein Projekt hat > 400 SourceCode Dateien.
Ich habe hier und da ToDos geschrieben, verteilt.
Wenn ich eine Datei offen habe wird dieses ToDo auch in der Task List angezeigt.
Aber sofern ich keine Datei offen habe werden auch keine ToDos angezeigt.
Ich las aber das es in VS08 bereits funktionieren soll.
Jemand eine Idee?