Nao compila por erros esdruxulos!

Iniciado por Natureba, 03 de Agosto de 2008, 23:05

tópico anterior - próximo tópico

Natureba

Ae pessoal...
to tentando compilar um codigo em C++ e estou tendo alguns problemas que nao consegui identificar as causas...

o código eh o seguinte:

#include <stdlib.h>
#include <string.h>
using namespace std;

typedef struct Vertex
{
    float x;
    float y;
    float z;
};

typedef struct Face
{
    int v1;
    int v2;
    int v3;
    int v4;
};

typedef struct position
{
    float X;
    float Y;
    float Z;
};

class Model
{
    private:
        Vertex *v;
        Face *f;
        int FacesCount, VertexCount;
        position pos;
        position rot;
        int Angle;
    public:
        float scale;

        // construtores/destrutores
        Model();
        Model(string);
        Model(string, float);
        Model(string, float, float, float, float);
        ~Model();

        // carregamento
        bool loadOBJ(string pathName);

        // renderização
        void render();
};

Model::Model()
{
}

Model::Model(string pathName)
{
}

Model::Model(string pathName, float scaleRate)
{
}

Model::Model(string pathName, float scaleRate, float X,float Y, float Z)
{
}

Model::~Model()
{
}

bool Model::loadOBJ(string pathName)
{
}

void Model::render()
{
}


e os erros apresentados são:


corte@corte:~/OGL$ g++ -o model model.cpp
model.cpp:41: erro: field 'string' has incomplete type
model.cpp:42: erro: expected `)' before ',' token
model.cpp:43: erro: expected `)' before ',' token
model.cpp:47: erro: 'string' has not been declared
model.cpp:57: erro: expected `)' before 'pathName'
model.cpp:61: erro: expected `)' before 'pathName'
model.cpp:65: erro: expected `)' before 'pathName'
model.cpp:73: erro: 'bool Model::loadOBJ' is not a static member of 'class Model'
model.cpp:73: erro: 'string' was not declared in this scope
model.cpp:74: erro: expected ',' or ';' before '{' token


Alguem sabe qual o problema???? achei simplesmente incompreensível o problema e to até com vontade de jogar o PC na parede...

Abraços.

fpissarra

#1
Tente substituir o header string.h por string.

string.h não é a mesma coisa que string:

#include <string>

fpissarra

Citação de: Natureba online 03 de Agosto de 2008, 23:05
Ae pessoal...
to tentando compilar um codigo em C++ e estou tendo alguns problemas que nao consegui identificar as causas...

o código eh o seguinte:

#include <stdlib.h>
#include <string.h>
using namespace std;

typedef struct Vertex
{
    float x;
    float y;
    float z;
};

typedef struct Face
{
    int v1;
    int v2;
    int v3;
    int v4;
};

typedef struct position
{
    float X;
    float Y;
    float Z;
};

class Model
{
    private:
        Vertex *v;
        Face *f;
        int FacesCount, VertexCount;
        position pos;
        position rot;
        int Angle;
    public:
        float scale;

        // construtores/destrutores
        Model();
        Model(string);
        Model(string, float);
        Model(string, float, float, float, float);
        ~Model();

        // carregamento
        bool loadOBJ(string pathName);

        // renderização
        void render();
};

Model::Model()
{
}

Model::Model(string pathName)
{
}

Model::Model(string pathName, float scaleRate)
{
}

Model::Model(string pathName, float scaleRate, float X,float Y, float Z)
{
}

Model::~Model()
{
}

bool Model::loadOBJ(string pathName)
{
}

void Model::render()
{
}


e os erros apresentados são:


corte@corte:~/OGL$ g++ -o model model.cpp
model.cpp:41: erro: field 'string' has incomplete type
model.cpp:42: erro: expected `)' before ',' token
model.cpp:43: erro: expected `)' before ',' token
model.cpp:47: erro: 'string' has not been declared
model.cpp:57: erro: expected `)' before 'pathName'
model.cpp:61: erro: expected `)' before 'pathName'
model.cpp:65: erro: expected `)' before 'pathName'
model.cpp:73: erro: 'bool Model::loadOBJ' is not a static member of 'class Model'
model.cpp:73: erro: 'string' was not declared in this scope
model.cpp:74: erro: expected ',' or ';' before '{' token


Alguem sabe qual o problema???? achei simplesmente incompreensível o problema e to até com vontade de jogar o PC na parede...

Abraços.


Uma coisa... os seus typedefs estão incompletos... um struct, em ANSI C, pode ser anônimo, mas um typedef não pode... assim, a forma correta de escrever o typedef Vertex, por exemplo, é:


typedef struct
{
  float x;
  float y;
  float z;
} Vertex;


Note como está diferente do typedef em seu código.

Outra coisa... vi que você "usou" o namespace std corretamente por causa de "string", mas esqueceu que, na STL, os arquivos de header não tem o .h no final... assim, seu segundo include deveria ser


#include <string>


Se precisar usar as funções de string.h, inclua-o ou inclua "cstring", sem o .h no final.

Outra dica... ao invés de passar objetos "string" para as funções, passe referências a elas... você estará passando ponteiros, por baixo dos panos, e evitando a criação de objetos anônimos (cópias):


bool Model::loadOBJ(const string& pathName)


O "const" aqui é só um aviso ao compilador de que a referência não pode ser modificada de dentro da função. Use referências também nos parâmetros dos construtores... acelera um bocado o processamento...

[]s
Fred