PDA

View Full Version : [C++] array.length().. non me lo so spiegare


Appassionato Pazzo
06-11-2009, 10:42
Salve a tutti,
sto seguendo un interessantissimo corso di c++ nella mia università e in questi giorni si è affrontato il discorso array.
Durante un'esercitazione ho provato ad usare un comando del tipo:

int a[10];
cout << a.length();

tratto dalle mie conoscienze java.
Il comando non ha dato nessun errore anzi mi ha stampato perfettamente la dimensione dell'array.

In aula ho chiesto al prof se questo fosse possibile e lui (molto preparato) mi ha spiegato che l'array in c++ non è trattato come oggetto e di conseguenza non è possibile eseguire funzioni del tipo array.funzione();
Detto questo ho voluto subito fare una ricerca online e ho scoperto che effettivamente nessuno parla di questo mio utilizzo.

Vorrei capire il perchè del funzionamento sul mio ambiente di sviluppo (uso devc++) visto che dovrebbe essere concettualmente sbagliato ciò che ho fatto. Grazie

Mesh89
06-11-2009, 10:59
Veramente bizzarro... A me, su g++ 4.4 (e il devc++ usa un porting del g++, anche se probabilmente un bel po' più vecchio) mi da questo errore di compilazione:

a.cpp: In function ‘int main()’:
a.cpp:8: error: request for member ‘length’ in ‘a’, which is of non-class type ‘int [10]’

come effettivamente è giusto che sia.

Appassionato Pazzo
06-11-2009, 11:23
EDIT:

AAAAAAAAAAAAAAA

ho trovato l'errore!!!


Non era magia del compilatore, era scemenza mia :)

Avevo fatto un po di confusione perchè mentre il prof parla di stringa come array di carattere char[] (ancora non ha spiegato string) io le utilizzo ugualmente.
Dunque quando lui deve contare i numeri di carattere della parola usava dei comandi differenti per vedere al dimensione dell'array.

Invece io, avendo la stringa facevo stringa.length().. e funzionava, però ero convinto di farlo ad un array.

In definitiva quel che facevo io (semplificato è):

#include<iostream>
using namespace std;
int main(){
string c;
c.length();
}

e tutto funzionava :)

Grazie comunque per l'aiuto e scusate se vi ho illuso xD

Mesh89
06-11-2009, 11:36
Se provo a compilare da ubuntu (con simulazione di devc++ in wine) dà errore (come è giusto che sia lol).

In ogni caso se puo essere d'aiuto, anche string in windows e devc++ viene utilizzata senza includere alcuna classe (includo solo l'iostream) mentre in simulazione di ubuntu da errore (come credo sia giusto che sia anche questo)..

succedono cose veramente strane con devc++ o sono pazzo io? :)

Uhm, per quanto riguarda le stringhe, anch'io posso usarle includendo solo iostream e usando il namespace std (sempre g++ su Ubuntu). La cosa dell'array cmq fidati che non è assolutmente C++ standard, il tuo professore ha ragione, al limite la puoi come trovare estensione aggiunta da qualche produttore al proprio compilatore.

Per quanto riguarda le differenze tra Windows e Wine non so che dirti, aspettiamo e vediamo se arriva qualcuno di più informato..

Appassionato Pazzo
06-11-2009, 12:45
Uhm, per quanto riguarda le stringhe, anch'io posso usarle includendo solo iostream e usando il namespace std (sempre g++ su Ubuntu). La cosa dell'array cmq fidati che non è assolutmente C++ standard, il tuo professore ha ragione, al limite la puoi come trovare estensione aggiunta da qualche produttore al proprio compilatore.

Per quanto riguarda le differenze tra Windows e Wine non so che dirti, aspettiamo e vediamo se arriva qualcuno di più informato..

Grazie per avermi risposto ma forse non hai letto il mio edit :)

Mesh89
06-11-2009, 18:26
Grazie per avermi risposto ma forse non hai letto il mio edit :)

Eh no, mi sa che l'hai fatto mentre scrivevo la risposta :D

Appassionato Pazzo
06-11-2009, 21:03
Eh no, mi sa che l'hai fatto mentre scrivevo la risposta :D

eheh.. sisi :) cmq grazie per l'interessamento :)