2010-10-12 6 views
0

La structure est définie commecomment passer une structure à une fonction en C++?

struct state{ 

    string node_name; 
    int node_no; 
    int node_val; 
    int occupant; 
    vector<int>node_con; 
     }; 

state s[100][100] 

Je veux l'envoyer à une fonction avec des valeurs i et j, où S [i] [j], (i-> lignes, colonnes j->). Comment la structure sera-t-elle envoyée avec i et j?

+0

Ce n'est pas tout à fait clair ce que vous demandez. En outre, cette ligne n'est pas un code valide. De quel type de structure s'agit-il? – JoshD

+0

@Martin Il a été marqué comme C++ par l'OP. A été changé en C par quelqu'un d'autre. –

+0

J'ai changé la balise C++ d'origine en C parce que le titre était C et la version originale de la question ne contenait pas C++. Je le change pour refléter la question actuelle. –

Répondre

0

en C il n'y a pas moyen (AFAIK) en C++, vous pouvez le faire

template <class T, int N, int M> 
void f(T (&a)[N][M]) 
{ 
//... 
} 

Sinon, vous pouvez passer les dimensions manuellement, ou les coder en dur

1

De cette façon

void f(StructName (*a)[100], int i, int j) { 

} 

Veuillez lire à propos des matrices bidimensionnelles et du pointeur sur les matrices. Vous pouvez en C++, vous pouvez passer par une référence, qui lui se dégrade pas à son premier élément

void f(StructName (&a)[100][100], int i, int j) { 

} 
0

En C, vous pouvez l'envelopper dans une autre structure :-)

Je vois des choses qui ne ressemble pas à C dans votre code ...

struct state { 
    string node_name; 
    int node_no; 
    int node_val; 
    int occupant; 
    vector<int>node_con; 
}; 

struct wrap { 
    int i; 
    int j; 
    struct state (*ps)[]; 
}; 

int main(void) { 
    struct state s[100][100]; 
    struct wrap x; 

    x.i = 100; 
    x.j = 100; 
    x.ps = s; 

    fx(x); 

    return 0; 
} 
+0

La question est étiquetée C++ cependant. – Arun

+0

Il a été marqué 'C' pendant un moment. Quand j'ai fini d'écrire ma réponse, le tag 'C' était déjà parti ... mais je pensais que je laisserais de toute façon ma réponse: après tout, le C++ de base est principalement compatible avec le C de base. – pmg

0

Vous voulez dire le passage d'un tableau de structures. Je pense que cela devrait être ceci:

struct state{ 
    string node_name; 
    int node_no; 
    int node_val; 
    int occupant; 
    vector<int>node_con; 
}; 

state s[100][100]; 

void doSomething(state theState[][100], int i, int j) 
{ 
    cout << theState[i][j].node_name << endl; 
} 

int main() 
{ 
    s[0][1].node_name = "s[0][1]"; 
    doSomething(s, 0, 1); 
} 
Questions connexes