2010-12-15 5 views
0

Je veux être en mesure de créer un type qui a 3 flotteurs (x, y, z). J'ai essayé:Créer ma propre 'type de données'

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

Mais cela n'a pas fonctionné.

Est-ce que cela a à déclarer un endroit où il peut être vu par main? Comment pourrais-je créer des méthodes getter et d'autres méthodes pour un type que j'ai créé?

+8

Quelle partie de cela a échoué? Pouvez-vous fournir un indice sur l'erreur (s)? – Mehrdad

+5

euh, lisez un livre sur les bases C ou C++? – atzz

+5

Est-ce C * ou * C++? –

Répondre

1

est-ce que cela doit être déclaré quelque part où il peut être vu par main?

Oui. En général, la classe ou struct est déclarée dans un fichier d'en-tête, que vous #include quelle que soit l'unité de traduction (fichier c) vous l'utilisez dans.

+0

Iv'e placé dans le même fichier que principal où la plupart de mes méthodes sont, donc j'ai supposé qu'il le «verrait» comme il le fait les méthodes: S – CurtisJC

+2

@Curtis: À ce stade, vous devriez probablement poster plus de code. Publiez où vous déclarez la structure et où vous essayez de l'utiliser. –

+0

Vertex vert = {1,2,3}; en principal et struct Vertex { \t float x; \t float y; \t flotteur z; }; après main .... (c'est après les changements de ce que tout le monde ici dit: S) ne fonctionne pas – CurtisJC

0

utilisant C, cela fonctionne pour moi

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

int main(void) { 
    Vertex a = {42, -42, 0}; 
    if (a.x + a.y + a.z == 0) return 1; /* warning about comparing floating point values */ 
    return 0; 
} 
+0

essayé, ne fonctionne pas pour moi :( – CurtisJC

+8

** COMMENT NE PAS TRAVAIL POUR VOUS? ** Donnez-nous de l'aide, nous essayons de vous aider! – pmg

+1

* devinant * il obtient toujours "pas déclaré dans cette portée" parce qu'il n'a rien dit à propos d'une erreur * différente *, et la plupart des gens remarquerait si elles ont eu une erreur, mais d'un autre genre. le message de sortie à tout le moins serait * regard * différent. – FrustratedWithFormsDesigner

4

comment je faites-le en C++. Voir main() pour l'exemple d'utilisation. N.B. Cela n'a pas été compilé ou testé.

#include <iostream> 

class Vertex 
{ 
public: 
    // Construction 
    Vertex(float x,float y, float z) : x_(x), y_(y), z_(z) {} 

    // Getters 
    float getX() const {return x_;} 
    float getY() const {return y_;} 
    float getZ() const {return z_;} 

    // Setters 
    void setX(float val) {x_ = val;} 
    void setY(float val) {y_ = val;} 
    void setZ(float val) {z_ = val;} 
private: 
    float x_; 
    float y_; 
    float z_; 
}; 

int main() 
{ 
    Vertex v(6.0f,7.2f,3.3f); 
    v.setZ(7.7f); 
    std::cout < "vertex components are " << v.getX() << ',' << v.getY() << ',' << v.getZ() << std::endl; 
} 
+0

cela fait exactement ce que je veux :) – CurtisJC

+2

Je downvote cela pour ne pas utiliser les variables publiques où ils sont complètement corrects. –

+0

@Alexandre C. Sa question posée sur les méthodes get()! Qu'est-ce que "complètement correct" signifie même? – PeteUK

Questions connexes