Error C3861: 'strcomp': identifier not found – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Error C3861: 'strcomp': identifier not found – C / C++ – Fórum – Programujte.comError C3861: 'strcomp': identifier not found – C / C++ – Fórum – Programujte.com

 

Tundra
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #1
-
0
-

Dobrý den, mám jeden problém při kompilaci c++ kódu.

Dělám třídu, která by měla načítat Milkshape model do proměnných, aby poté mohla být zobrazena.

Mám soubor ModelMilkshape.h:

#ifndef MODELMILKSHAPE_H

#define MODELMILKSHAPE_H

#include "../Model.h"

class ModelMilkshape : public Model
{
protected:
//data k načtení modelu - nastavována jsou potomkem této třídy
char *model_src;

public:
ModelMilkshape();
virtual ~ModelMilkshape();

virtual bool LoadModelData();
};


Tato třída dědí po třídě Model:. Model.h:
#ifndef MODEL_H

#define MODEL_H

#include "external/KMatrix.h"

class Model
{
protected:

//struktury pro model objektu
struct Vertex // Struktura vertexu
{
char m_boneID; //pro skeletálí animaci
float m_location[3]; // X, y, z souřadnice bodu (vertexu)
};

struct Triangle //struktura trojúhelníku
{
float m_vertexNormals[3][3]; //3 normálové vektory
float m_s[3], m_t[3]; //texturové koordináty
int m_vertexIndices[3]; //indexy 3 použitých vertexů
};

struct Mesh //struktura Meshe
{
int m_materialIndex; //index materiálu použitého pro mesh
int m_numTriangles; //počet trojůhelníků
int *m_pTriangleIndices; //indexy použitých trojúhelníků
};

struct Material //struktura materiálu
{
float m_ambient[4], m_diffuse[4], m_specular[4], m_emissive[4]; //nastavení světla
float m_shininess; //lesk materiálu
GLuint m_texture; //úložiště pro texturu
char *m_pTextureFilename; //adresa souboru s texturou
};

struct Keyframe // Hodnoty animace kloubu obsahující čas, rotaci a posunutí
{
int i_joint_index; // Index kloubu
float f_time; // Čas v milisekundách
float pf_parameter[3]; // Základní hodnota podle kterého se počítá vektor rotace a posunutí
};


struct Joint // Informace o kloubech kostry
{
float pf_rotation[3]; // Lokální rotace
float pf_translation[3]; // Lokální posunutí
/*
* Absolutní, či relativní matice
* Když pohnu absolutní maticí, pohnu i relativní
* Když pohnu relativní maticí, tak absolutní se nemění
*/
K_CMatrix mat_absolute, mat_relative;

int i_num_rotation_key_frames, i_num_translation_key_frames; // Počet snímků rotace a posunutí
Keyframe *p_keyframe_trans; // Ukazatel na animační hodnoty posunutí kloubu
Keyframe *p_keyframe_rot; // Ukazatel na animační hodnoty rotace kloubu

int i_current_keyframe_trans, i_current_keyframe_rot; // Aktuální posunutí a rotace
K_CMatrix mat_final; // Konečná matice

int i_parent; // Rodičovský kloub
};

protected:
double dTotalTime; // Celkový čas animace
double Time; // Čas snímku, který se má vyobrazit
double LastTime; // Absolutní čas, ve ketrém probíhala minulá část animace
double NullTime; // Čas, kdy začala animace (oproti globálnímu času) (každý cyklus animace se aktualizuje)
double TimeStart; // Čas, kde začíná lokální animace (když chci spouštět dokola jen část animace)
double TimeStop; // Čas, kde končí lokální animace
bool bLooping; // Zda se má animace pohybovat, nebo má stát. Pokud je false, poběží pořád animace v čase Time

int m_numVertices; // Počet vertexů
Vertex *m_pVertices; // Dynamické pole vertexů

int m_numTriangles; // Počet trojúhelníků
Triangle *m_pTriangles; // Dynamické pole trojúhelníků

int m_numMeshes; // Počet meshů
Mesh *m_pMeshes; // Dynamické pole meshů

int m_numMaterials; // Počet materiálů
Material *m_pMaterials; // Dynamické pole materiálů

int m_numJoints; // Počet kloubů kostry
Joint *m_pJoints; // Dynamické pole kloubů kostry

public:
Model(); //konstruktor
virtual ~Model(); //destruktor

bool Draw(); //vykreslí objekt
bool ReloadTextures(); //znovu načte textury pokud se mohly změnit nebo mohla být ztracena data

virtual bool LoadModelData()=0; //načítá data do proměnných definujících model objektu - nastavuje se v potomku, který načítá model objektu

void SetJointKeyframe( int i_joint_index, int i_keyframe_index, float f_time, float *pf_parameter, bool b_rotation );
void SetupJoints(); // Nastaví matice kloubů
void Animation(); // Animace modelu
void Restart(); // Restart animace

};
#endif // ndef MODEL_H


-ta asi není moc zásadní. Hlavní jsou ty struktury nahoře, do kterých se právě pomocí funkce LoadModelData() načítají informace.

Nechci sem vypisovat celou třídu ModelMilkshape::LoadModelData(), protože je hodně dlouhá a většina je nepodstatná. V soubou nejdříve includuji soubory:
#include <windows.h>		// Header File For Windows

#include <gl\gl.h> // Header File For The OpenGL32 Library

#include <fstream> //některé funkce pro načítání dat
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#include "ModelMilkshape.h"
#include "../Objekt.h"
. Potom definuji struktury MS3DHeader, MS3DVertex, MS3DTriangle a podobně pro načítání z binárního souboru .ms3d . Ve funkci načítám vertexy, rojúhelníky, meshe a tak. Problém nastane v části, která načítá Jointy (klouby kostry). Tady je ta část:

float f_anim_fps = *( float* )pPtr;		// Načti rychlost animace kostry

pPtr += sizeof( float ); // Posuň se v souboru na další hodnoty
pPtr += sizeof( float ); // Přeskoč hodnotu aktuálního času
int i_total_frames = *( int* )pPtr; // Načti počet snímků
pPtr += sizeof( int ); // Posuň se v souboru na další hodnoty
dTotalTime = i_total_frames*1000.0 / f_anim_fps; // Vypočítej délku animace
m_numJoints = *( word* )pPtr; // Načti počet kloubů
pPtr += sizeof( word ); // Posuň se v souboru na další hodnoty
m_pJoints = new Joint[m_numJoints]; // Alokuj paměť pro počet kloubů kostry modelu

struct TJointNameListRec // Vytvoř pomocnou strukturu pro načtení indexu a jména specifického kloubu
{
int i_joint_index; // Index kloubu
const char *pc_joint_name; // Jméno kloubu
};

const byte *pby_temp_load_data = pPtr; // Vytvoř další buffer pro načtení indexu a jména kloubu

TJointNameListRec *p_name_list = new TJointNameListRec[m_numJoints]; // Alokuj paměť pro počet indexů typu JoinNameRec
for ( i = 0; i < m_numJoints; i++ ) // Cykluj podle počtu kloubů
{
MS3DJoint *p_joint = ( MS3DJoint* )pby_temp_load_data; // Načti ze souboru hodnoty typu MS3DJoint
pby_temp_load_data += sizeof( MS3DJoint ); // Přeskoč hodnoty času sekundach
pby_temp_load_data += sizeof( MS3DKeyframe ) * ( p_joint->w_num_key_frames_rot + p_joint->w_num_key_frames_trans ); // Přeskoč hodnoty rotace a posunutí, které budem načítat později
p_name_list[i].i_joint_index = i; // Načti index kloubu
p_name_list[i].pc_joint_name = p_joint->pc_name; // Načti jméno kloubu
}

for ( i = 0; i < m_numJoints; i++ ) // Znova cykluj podle počtu kloubů
{
MS3DJoint *p_joint = ( MS3DJoint* )pPtr; // Znova načti ze souboru hodnoty typu MS3DJoint
pPtr += sizeof( MS3DJoint ); // Posuň se v souboru na další hodnoty

int i_parent_index = -1; // Rodičovský index nastav na -1
if ( strlen( p_joint->pc_parent_name ) > 0 ) // Jestliže jméno rodičovského kloubu existuje
{
for (int j = 0; j < m_numJoints; j++ ) // Cykluj opět podle počtu kloubů
{
if ( strcomp( p_name_list[j].pc_joint_name, p_joint->pc_parent_name ) == 0 ) // Pokud je jméno kloubu a jeho rodiče totožné
{
i_parent_index = p_name_list[j].i_joint_index; // Tak nastav stejný index rodiče a potomka
break; // A vyskoč z cyklu
}
}
if ( i_parent_index == -1 ) // Jestliže je rodičovský index -1, tak
{
MessageBox( NULL, "Unable to find parent bone in MS3D file", "Error", MB_OK | MB_ICONERROR ); // Vyhoď chybovou hlášku
return false; // A funkci předej false
}
}

memcpy( m_pJoints[i].pf_rotation, p_joint->pf_rotation, sizeof( float ) * 3 ); // Načti rotaci kloubu
memcpy( m_pJoints[i].pf_translation, p_joint->pf_translation, sizeof( float ) * 3 ); // Načti posun kloubu
m_pJoints[i].i_parent = i_parent_index; // Načti rodičovský index
m_pJoints[i].i_num_rotation_key_frames = p_joint->w_num_key_frames_rot; // Načti počet snímků rotace
m_pJoints[i].p_keyframe_rot = new Keyframe[p_joint->w_num_key_frames_rot]; // Alokuj paměť podle počtu snímků rotace modelu
m_pJoints[i].i_num_translation_key_frames = p_joint->w_num_key_frames_trans; // Načti počet snímků translace
m_pJoints[i].p_keyframe_trans = new Keyframe[p_joint->w_num_key_frames_trans]; // Alokuj paměť podle počtu snímků posunutí modelu

for ( int j = 0; j < p_joint->w_num_key_frames_rot; j++ ) // Cykluj podle počtu snímků rotace
{
MS3DKeyframe *p_key_frame = ( MS3DKeyframe* )pPtr; // Načti ze souboru hodnoty typu TMs3dKeyframe
pPtr += sizeof( MS3DKeyframe ); // Posuň se v souboru na další hodnoty
SetJointKeyframe( i, j, p_key_frame->f_time*1000.0f, p_key_frame->pf_parameter, true ); // Nastav hodnoty rotace kloubu
}

for ( int j = 0; j < p_joint->w_num_key_frames_trans; j++ ) // Cykluj podle počtu snímků translace
{
MS3DKeyframe *p_key_frame = ( MS3DKeyframe* )pPtr; // Načti ze souboru hodnoty typu TMs3dKeyframe
pPtr += sizeof( MS3DKeyframe ); // Posuň se v souboru na další hodnoty
SetJointKeyframe( i, j, p_key_frame->f_time * 1000.0f, p_key_frame->pf_parameter, false ); // Nastav hodnoty posunutí kloubu
}
}

delete[] p_name_list; // Vymaž buffer bufferu souboru (počel listů kloubu)

SetupJoints(); // Nastav matice rotace a translace kloubů


Je to přejatá část kódu, kterou úplně nechápu, ale celkem se mi řekl bych povedlo implementovat jí prozatimě do mého programu. Tady je začátek výpisu kompilátoru:
1>------ Build started: Project: Program, Configuration: Release Win32 ------

1>Compiling...
1>ModelMilkshape.cpp
1>.\Model\ModelMilkshape.cpp(216) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(74) : see declaration of 'strcpy'
1>.\Model\ModelMilkshape.cpp(264) : error C3861: 'strcomp': identifier not found
1>Objekty.cpp
1>.\Objekty.cpp(47) : error C2039: 'Draw' : is not a member of 'Objekt'
1> c:\_honza\programování\c++\programy visual studio\program\program\Objekt.h(5) : see declaration of 'Objekt'
1>.\Objekty.cpp(71) : error C2039: 'ReloadTextures' : is not a member of 'Objekt'
1> c:\_honza\programování\c++\programy visual studio\program\program\Objekt.h(5) : see declaration of 'Objekt'
1>.\Objekty.cpp(89) : error C2039: 'LoadModelData' : is not a member of 'Objekt'
1> c:\_honza\programování\c++\programy visual studio\program\program\Objekt.h(5) : see declaration of 'Objekt'
1>Model.cpp
1>.\Model.cpp(12) : error C2039: 'poloha' : is not a member of 'Model'
1> c:\_honza\programování\c++\programy visual studio\program\program\Model.h(7) : see declaration of 'Model'
1>.\Model.cpp(12) : error C2228: left of '.x' must have class/struct/union
1>.\Model.cpp(13) : error C2039: 'poloha' : is not a member of 'Model'
1> c:\_honza\programování\c++\programy visual studio\program\program\Model.h(7) : see declaration of 'Model'
1>.\Model.cpp(13) : error C2228: left of '.y' must have class/struct/union
1>.\Model.cpp(14) : error C2039: 'poloha' : is not a member of 'Model'
1> c:\_honza\programování\c++\programy visual studio\program\program\Model.h(7) : see declaration of 'Model'
1>.\Model.cpp(14) : error C2228: left of '.z' must have class/struct/union
1>.\Model.cpp(15) : error C2039: 'poloha' : is not a member of 'Model'


Errorů je hromada přes, stím bych neměl mít problémy. Už dlouho se ale trápím s řádkem
1>.\Model\ModelMilkshape.cpp(264) : error C3861: 'strcomp': identifier not found.

Máte někdo tušení, čím by to mohlo být a jak to vyřešit?
Děkuji mnohokrát za nápady

Nahlásit jako SPAM
IP: 82.117.140.–
Bald3rr0
Super člen
21. 11. 2009   #2
-
0
-

To Tundra : Je to strcmp ne strcomp

Nahlásit jako SPAM
IP: 82.100.0.–
Tundra
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #3
-
0
-

To Bald3rr :

Vpravdě mě to taky napadlo, ale jakási funkce strcomp taky existuje (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.strcomp.aspx). Bylo to již ve funkčním kódu, tak se mi nezdá pravděpodobné, že by tam byl chyba (překompilovat jsem to nezkoušel).

Jako řešení by nejspíš také šlo prohodit to strcomp za strcmp, ale nechápu přesně, jak se od sebe ty funkce liší. Tak jestli je někdo znáte, byl bych také velmi rád za poučení.

Nahlásit jako SPAM
IP: 82.117.140.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2009   #4
-
0
-

To Tundra : jenze to je metoda objektu string.. a jeste StrComp ..
na ten strcmp by melo byt taky #include <string.h>

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Tundra
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #5
-
0
-

To KIIV :
To jsem zkoušel už předtím a teď taky a nefuguje to. Hlásí to stále stejný error. Vkládal jsem string.h i string, přepisoval velká malá písmena, nic...

Nahlásit jako SPAM
IP: 82.117.140.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2009   #6
-
0
-

To Tundra : tam je jedine strcmp

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bald3rr0
Super člen
21. 11. 2009   #7
-
0
-
Nahlásit jako SPAM
IP: 82.100.0.–
Tundra
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #8
-
0
-

No tak já tam vyzkouším ten strcmp. Bude chvíli trvat, než se dozvíme výsledek protože je tam hromada dalších chyb a část kódu jsem ještě zapoměl přepsat pro struktury, které používám, takže to nejspíš zítra napíšu sem, jak to vypadá.

Nahlásit jako SPAM
IP: 82.117.140.–
Tundra
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #9
-
0
-

Tak jsem se už bavil všech chybových hlášek, spustil jsem to a program spadnul. Spostil jsem to v debugovacím módu a to to nespadlo, ale ono načítání modelu nějak nefunguje. A protože tý načítací části kódu prakticky nerozumím, bude to asi fakt zábava to celý debugovat... To se mám na co těšit :smile10:

Nahlásit jako SPAM
IP: 82.117.140.–
Tundra
~ Anonymní uživatel
25 příspěvků
22. 11. 2009   #10
-
0
-

Tak jsem to skusil spustit a skutečně to mělo být strcmp. Zjistil jsem, že v kódu, který jsem se inspiroval je chyb mnohem víc. Fakt nechápu, kdo chce poučovat lidi svými kódy, když je ani nezkusí zkompilovat...

Nahlásit jako SPAM
IP: 188.120.216.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 83 hostů

Podobná vlákna

G++ not found — založil Melamber777

404 Not Found — založil wtf

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý