File öffnen
-
Hallo zusammen,
ich habe eine Frage. Ich möchte einen File öffnen das ich weiter bearbeiten möchte ich zeige euch das mal am besten:
char* pOffsetFileName; //This function read the offset file. //Input: char* pOffsetFileName - file to read void Interpolator::ReadOffsetFile(char* pOffsetFileName) { //open the file FILE* pInFile = fopen(pOffsetFileName, "r"); if (pInFile == NULL) { m_ErrorType = BAD_OFFSET_FILE; return; } //Allocate memory for m_pTimeDistArray m_pTimeDistArray = new int [m_pSampledMotion->m_NumFrames]; int frameNum, frameNumPrev = 0; //read the file for (int i = 0; i < m_pSampledMotion->m_NumFrames; i++) { //read next line if (fscanf(pInFile, "%d", &frameNum) == -1) { m_ErrorType = BAD_OFFSET_FILE; return; } //Compute offset and store into array //offset = number of frames skipped between frame i and i-1 m_pTimeDistArray[i] = frameNum - frameNumPrev - 1; frameNumPrev = frameNum; } }Das ist eine Programmier Aufgabe, ich möchte hierbei die Varible mit der Funktion fopen initialisieren. Krige das irgendwie nicht so hin, kann mir da jemand mal bitte unter die Arme greifen ?
Grüße
tyson
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Mmmh. Der code sieht gut aus, wobei der richtige C++-Programmierer std::fstream nehmen würde. Was ist denn genau dein Problem?
-
Hallo nochmal zusammen,
ich sollte die Frage mal ein wenig anders stellen. Ich bin nicht so sehr vertraut mit C++.
Es geht hierbei im "Interplotion" im Bereich Computer Animation, die Aufgabe besteht darin, dass ich eine "Animation" bekomme, wo z.B. ein Männeken am laufen ist und während die Animation läuft soll ich eine andere Animation hochladen, mit einem anderen Verhalten z.B. er geht diesmal rückwärts.
Das Ziel ist es die übergänge der beiden Animationen so "geschmeidig" wie möglich zu machen, d.h. zu Interpolieren.Ich versuche gerade dem Button "Interpolate" mitzuteilen, dass er eine Funktion aufrufen soll. Das sieht folgerdermaßen aus.
Der Konstruktor
Interpolator::Interpolator(Motion* pSampledMotion, char* pOffsetFileName) { //Set default interpolation type m_InterpTypeToUse = LINEAR; //set default angle representation to use for interpolation m_AngleRepresToUse = EULER; //Set motion to be interpolated m_pSampledMotion = pSampledMotion; //Set ErrorType to NO_ERROR m_ErrorType = NO_ERROR_SET; //Init m_pTimeDistArray array m_pTimeDistArray = NULL; ReadOffsetFile(pOffsetFileName); }die Funktion ich aufrufen möchte: zuerst die erste und danach die zweite
void Interpolator::ReadOffsetFile(char* pOffsetFileName) { //open the file FILE* pInFile = fopen(pOffsetFileName, "r"); if (pInFile == NULL) { m_ErrorType = BAD_OFFSET_FILE; return; } //Allocate memory for m_pTimeDistArray m_pTimeDistArray = new int [m_pSampledMotion->m_NumFrames]; int frameNum, frameNumPrev = 0; //read the file for (int i = 0; i < m_pSampledMotion->m_NumFrames; i++) { //read next line if (fscanf(pInFile, "%d", &frameNum) == -1) { m_ErrorType = BAD_OFFSET_FILE; return; } //Compute offset and store into array //offset = number of frames skipped between frame i and i-1 m_pTimeDistArray[i] = frameNum - frameNumPrev - 1; frameNumPrev = frameNum; } } //Create interpolated motion void Interpolator::Interpolate(Motion*& pInterpMotion) { //Do nothing if error is set if (m_ErrorType != NO_ERROR_SET) { pInterpMotion = NULL; return; } //Compute number of frames int the new (interpolated) motion int nNumFrames = 0; //Count all skipped frames for (int i = 0; i < m_pSampledMotion->m_NumFrames; i++) nNumFrames += m_pTimeDistArray[i]; //Add number of frames on the sampled file nNumFrames += m_pSampledMotion->m_NumFrames; //Allocate new motion - initially set to default motion pInterpMotion = new Motion(nNumFrames); //Perform the interpolation if (m_InterpTypeToUse == LINEAR && m_AngleRepresToUse == EULER) LinearInterpEulerAngles(pInterpMotion); else { //For now only linear interpolation of euler angles is supported m_ErrorType = NOT_SUPPORTED_INTERP_TYPE; delete pInterpMotion; pInterpMotion = NULL; return; } }Jetzt meine Frage ich mein die Frage ist wohl für den einen oder anderen ziemlich einfach, aber ich kenne mich halt nicht so sehr damit aus:
Ich möchte meinem Button" Interpolate sagen" dass er eines Funktionen aufrufen soll, aber beim erzeugen des Objektes habe ich meine Problemestatic Motion *pSampledMotion = NULL; // Motion information as read from AMC file //Interpolate loaded motion using linear interpolation void interpolate_callback(Fl_Button *button, void *) { interpolate_button->value(); ?? Interpolator neu = new Interpolator(pSampledMotion,????????); }Ich mein mein Konstruktor hat 2 Parameter, ich weiss hier nicht wie ich diesen 2 Parameter bestimmen kann. Ich kann sagen ok, fopen usw. aber in der Funktion ReadOffsetFile wird ja so ein File geöffnet ?
Habt Ihr meine Frage verstanden ???
Würd mich freuen wenn ihr mir helfen könntet...
Grüße
-
und Ausserdem wieso bekomme ich eine Fehlermeldung wenn ich einen Objekt erzeugen möchte mit dem Konstruktor :
Interpolator::Interpolator(Motion* pSampledMotion, char* pOffsetFileName) { //Set default interpolation type m_InterpTypeToUse = LINEAR; //set default angle representation to use for interpolation m_AngleRepresToUse = EULER; //Set motion to be interpolated m_pSampledMotion = pSampledMotion; //Set ErrorType to NO_ERROR m_ErrorType = NO_ERROR_SET; //Init m_pTimeDistArray array m_pTimeDistArray = NULL; ReadOffsetFile(pOffsetFileName); }ich versuche einen Objekt zu erzeugen, indem ich:
static Motion *pSampledMotion = NULL; char* OffsetFile = "text.txt"; //Interpolate loaded motion using linear interpolation void interpolate_callback(Fl_Button *button, void *) { interpolate_button->value(); Interpolator neu = new Interpolator(pSampledMotion, OffsetFile); }Die Fehlermeldung die ich bekomme ist :
--------------------Configuration: key_frame1 - Win32 Debug--------------------
Compiling...
player.cxx
C:\Dokumente und Einstellungen\Resul\Desktop\Partition\BILKENT\Computer Animation\Motion Capture\Acclaim\asf_amc_viewer 1-18-2005\viewer\player.cxx(202) : error C2440: 'initializing' : cannot convert from 'class Interpolator *' to 'class Interpolato
r'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.key_frame1.exe - 1 error(s), 0 warning(s)