Pages: [1]   Go Down
Print
Author Topic: Problema con oggetti e string  (Read 801 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Pietro Martello
Matricola
*
Offline Offline

Posts: 20


« on: 31-01-2014, 15:24:12 »

Mentre mi esercitavo con gli oggetti ho incontrato questo problema:
Stavo creando una classe Nome, non particolarmente complicata, che incollo qui:

L'Header
Quote
#ifndef NOME_H
#define NOME_H

#include<string>

class Nome
{
      private:
              string primonome;
              string secondonome;
              string cognome;
      public:
             Nome(string, string);
             Nome(string, string, string);
             string GetPrimoNome();
             string GetSecondoNome();
             string Get Cognome();
             friend ostream & operator << (ostream & sx, const Nome & dx);
};

#endif

Il .CPP
Quote
#include<iostream>
#include"Nome.h"

using namespace std;

Nome::Nome(string nom, string cogn)
{
      primonome = nom;
      secondonome = "";
      cognome = cogn;
}

Nome::Nome(string nom, string nom2, string cogn)
{
      primonome = nom;
      secondonome = nom2;
      cognome = cogn;
}

string Nome::GetPrimoNome()
{
      return primonome;
}

string Nome::GetSecondoNome()
{
      return secondonome;
}

string Nome::Get Cognome()
{
      return cognome;
}

ostream &  operator << (ostream & sx, const Nome & dx)
{
    return sx << dx.PrimoNome << " " << dx.Cognome << ".";
}

e il main:
Quote
#include<iostream>
#include "Nome.h"
using namespace std;

int main ()
{
    Nome nom("Joe", "R.", "Balooka");
   
    string s = nom.GetPrimoNome();
   
    cout<<s<<endl;
   
    system("pause");
    return 0;
}

Come potete vedere è abbastanza semplice, giusto per provare a definire il cout, il mio problema è che ogni volta che tento di compilarlo mi dà errore, e dice:

"in file included from Name.cpp"
Poi ripete "string does not name a type" più o meno ogni volta che dichiaro una variabile di quel tipo, più una valanga di altri errori perché non riconosce i membri...
Qualsiasi cosa faccia non riesco a risolvere il problema, perché sono sicuro di aver inserito la libreria corretta e non vedo differenze con altri oggetti di Cincotti che utilizzano stringhe... e a questo punto ho finito le idee.

Qualcuno mi sa dire cosa succede? Grazie in anticipo.
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.476


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 01-02-2014, 03:37:41 »

Sì, l'output del tuo compilatore è corretto  ok!

Ci sono un po' di errori di inclusione e di namespace.

Devi assicurarti che ogni blocco che viene compilato (soprattutto le parti incluse in file .h !!!) abbia risolti tutti i collegamenti con le rispettive librerie.

Dunque, inserirei un
using namespace std
all'inizio (primo rigo) di ognuno dei file .cpp, prima ancora degli #include.

Dopodiché, mi concentrerei nel tentare di capire come mai hai un metodo che si chiama
Get Cognome
sì, proprio così, con uno spazio nel mezzo testate. Ed è proprio ripetuto con lo stesso errore anche nel file .cpp che definisce il corpo del metodo!

Poi, correggerei l'errore di aver usato nomi di variabili membro interne alla classe, che nella definizione sono scritte tutte in minuscolo, mentre quando vengono usate dal codice che esegue funzioni membro, magicamente hanno le lettere iniziali maiuscole, di fatto configurandosi come nuovi identificatori, ovviamente inesistenti no...

Poi quel "system" è così ostico, che richiede una libreria apposita tutta per lui.
Leggo su Internet che questa è <cstdlib>, ma quasi sicuramente andrebbe bene anche il corrispettivo C <stdlib.h>... ma su quest'ultima cosa non ci metto la mano sul fuoco, magari puoi provare e ci dici tu... univ
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pietro Martello
Matricola
*
Offline Offline

Posts: 20


« Reply #2 on: 01-02-2014, 10:56:33 »


Poi, correggerei l'errore di aver usato nomi di variabili membro interne alla classe, che nella definizione sono scritte tutte in minuscolo, mentre quando vengono usate dal codice che esegue funzioni membro, magicamente hanno le lettere iniziali maiuscole, di fatto configurandosi come nuovi identificatori, ovviamente inesistenti no...

Poi quel "system" è così ostico, che richiede una libreria apposita tutta per lui.
Leggo su Internet che questa è <cstdlib>, ma quasi sicuramente andrebbe bene anche il corrispettivo C <stdlib.h>... ma su quest'ultima cosa non ci metto la mano sul fuoco, magari puoi provare e ci dici tu... univ

Grazie, correggerò gli errori appena posso. Però non ho capito bene queste ultime correzioni.
Riguardo alla prima è volontario (al contrario di Get Cognome  testate) che io abbia nominato le variabili con caratteri tutti minuscoli mentre i metodi che le richiamano hanno le iniziali maiuscole, in modo da non confondermi tra metodo e variabile.
Sinceramente non mi sembra un'errore, anche se C++ considera la differenza tra maiuscolo e minuscolo. Nel primo caso parliamo di variabili e nel secondo di metodi. Dove sbaglio col mio ragionamento?

Poi system("pause") non mi ha mai richieto una libreria. L'ho usato in tonnellate di file sin dall'inizio dell'anno usando solamente #include<iostream> e mi ha sempre funzionato. Poi io uso DEV C++, quindi forse ci sono delle differenze di compilatore.

EDIT
Perdonami, vedo ora che avevo usato le variabili con le maiuscole nella definizione dell'operatore. Mi devo essere confuso con i metodi dato che era la prima volta che lo facevo.
Ora funziona. Il system("pause") non mi richiede alcuna libreria.

Non riesco comunque a capire perché richieda il namespace all'inizio dei file cpp. Negli oggetti che ci ha passato il professore non è così.
« Last Edit: 01-02-2014, 11:13:20 by Pietro Martello » Logged
Pages: [1]   Go Up
Print
Jump to: