Newsgroup: it.comp.lang.c++
Titolo: errore strano

expected primary-expression before '.' token
/*Catena di anelli*/
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
struct anello
{
bool tipo;
/*true = ferro - false = rame*/
bool catena[1000];
};
const int maxrame = 5;
anello carica_catena(const int ramemassimo, int num, anello
catena[1000])
{
for(int i=0; i<num; i++)
{
anello.catena[i] = false;
}
}
int main()
{
char scelta;
bool flag = false, tipo;
int n = 0;
do
{
system("cls");
cout << " I ) Inizializza catena vuota." << endl;
cout << " A ) Aggiungi anello." << endl;
cout << " E ) Elimina anello." << endl;
cout << " S ) Stampa della catena." << endl;
cout << " ..::Any key fot exit::.." << endl;
cin >> scelta;
switch(scelta)
{
case 'I':
cout << "Numero di anelli vuoi caricare:";
cin >> n;
carica_catena(maxrame,n,catena);
break;
case 'A':
break;
case 'E':
break;
case 'S':
break;
default:
flag = true;
}
}
while(flag != true);
getch();
return 0;
}
Ho scritto questo codice ma mi da un errore alla riga 21
del tipo : 21 expected primary-expression before '.' token
ed alla riga 46 `catena' undeclared (first use this function)
come lo posso risolvere.

 }
"anello" è il tipo, catena è il nome del parametro; che poi, siccome
te passi anello catena[1000], questo in realtà è un puntatore anello*
catena.
Ciao
  Andrea

ho cambiato in questo modo visto che dianzi la logica del programma era
poco chiara, il problema che il problema dell'errore dentro la
definizione della funzione rimane
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
struct anello
{
bool tipo;
/*true = ferro - false = rame*/
};
const int maxrame = 5;
void carica_catena(const int ramemassimo, int num, anello catena[1000])
{
for(int i=0; i<num; i++)
{
anello.catena[i] = 20;
cout << anello.catena[i];
}
}
int main()
{
anello catena[1000];
char scelta;
bool flag = false, materiale;
int n = 0, pos = 0, sceglitipo;

ho cambiato in questo modo ma mi da sempre il solito errore dentro la
funzione carica catena.

Andrea Palazzi ha scritto:
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
struct anello
{
bool tipo;
/*true = ferro - false = rame*/
};
const int maxrame = 5;
void carica_catena(const int ramemassimo, int num, anello catena[1000])
{
for(int i=0; i<num; i++)
{
anello.catena[i] = 20;
cout << anello.catena[i];
}
}
int main()
{
anello catena[1000];
char scelta;
bool flag = false, materiale;
int n = 0, pos = 0, sceglitipo;
do



 funzione carica catena.
Read my lips: quando dichiari "anello catena[1000]", anello č il tipo,
catena č il nome. Cosě come quando dichiari "int num", int č il tipo e
num č il nome della variabile.
Poi nel tuo caso "anello catena[1000]" diventa un "anello* catena".
Ciao
  Andrea

 Poi nel tuo caso "anello catena[1000]" diventa un "anello* catena".
Tanto per rimarcare il concetto, la tua struct anziché chiamarla
"anello" chiamala
struct StructAnello {
bool tipo;
bool catenaInStructAnello[1000];
};
e fallo funzionare con questi nomi (occhio alle maiuscole, ovviamente).
Ciao
  Andrea

 Poi nel tuo caso "anello catena[1000]" diventa un "anello* catena".
In realta' e' ancora peggio, perche' l'OP fa confusione tra la struct
anello, che contiene un array catena, e l'array catena argomento della
funzione, infatti nel corpo della funzione sembra cercare di usare
quest'ultimo come array di bool, mentre e' un array di anello che ha un
membro catena che e' un array di bool.
Direi che l'OP farebbe bene a chiarirsi le idee e/o studiare il C++ un
po' meglio.
Ciao,
Nicola

 membro catena che e' un array di bool.
Me ne ero accorto, ma speravo che capendo il primo errore arrivasse a
vedere il secondo da sé :-P
Ciao
  Andrea