C++/STL problem på 64 bits Linux 9.04

Kategori overført fra Linux1

C++/STL problem på 64 bits Linux 9.04

Innleggav TO » tor 21.05.2009 0:51

Kode: Merk alt
using namespace std;
...
struct result_t {
  // Hold one single result
  string key;                     
  vector<double> vector; // <----- denne får jeg nå feil på
};

Feilmeldingen:
Kode: Merk alt
./program.cpp:17: error: declaration of ‘std::vector<double, std::allocator<double> > result_t::vector’
/usr/include/c++/4.3/bits/stl_vector.h:176: error: changes meaning of ‘vector’ from ‘class std::vector<double, std::allocator<double> >’

Dette fungerer fint på 32 bits Ubuntu 8.04, har noen et tips?
EDIT: Det fungerer med g++-4.2, men ikke med nyeste g++-4.3

EDIT2: Har nå klart å redusere problemet, det ser ut som om jeg får problem
når struct-objektet har etternavn vector når jeg bruker g++-4.3:
Kode: Merk alt
/*  tryit2.cpp - demonstrate compile error using g++ version 4.3

        Compile and check command
       
       $   g++-4.3 tryit2.cpp -o tryit2    ; ./tryit2 ; rm ./tryit2   # compile error
       $   g++-4.2 tryit2.cpp -o tryit2    ; ./tryit2 ; rm ./tryit2   # OK

*/

using namespace std;
#include <string>
#include <iostream>
#include <vector>

struct result_t {
  string key;         
  vector<double> vector;        // this give trouble using g++-4.3
  //vector<double> Vector;    // OK
};

int main(int argc,char **argv)
{
  result_t res;
  string mykey=string("mykey");
  vector<double> v;
  for (unsigned int i=0;i<10;i++)
    {
      v.push_back(i);
    }
  res.key=mykey;
  res.vector=v;
  //res.Vector=v;
 
  cerr<<"res.key="  << res.key << endl;
  for (unsigned int i=0;i<10;i++)
    {
      cerr<<"res.vector[" << i       << "]=" << res.vector[i] <<endl;
      //cerr<<"res.Vector[" << i       << "]=" << res.Vector[i] <<endl;
    }
}

Fint om noen tar en titt og bekrefter, jeg får følgende feil ved g++-4.3:
Kode: Merk alt
$ g++-4.3 tryit2.cpp -o tryit2    ; ./tryit2 ; rm ./tryit2
tryit2.cpp:15: error: declaration of ‘std::vector<double, std::allocator<double> > result_t::vector’
/usr/include/c++/4.3/bits/stl_vector.h:176: error: changes meaning of ‘vector’ from ‘class std::vector<double, std::allocator<double> >’
medlem i 212 måneder
 

Re: C++/STL problem på 64 bits Linux 9.04

Innleggav moma » tir 26.05.2009 18:49

Hei TO,
og hyggelig å høre fra deg igjen.

Variabelnavnet "vector" er samme som template/klassenavnet. Du bør gi variabelen (objektet) et annet navn. F.eks

vector<double> tall;

Objekt -og variabelnavnene bør aldri være samme som typenavn (klasser, strukturer eller navn på en basistype). G++4.3 har sikkert bare blitt strengere på dette punktet og bra er det.

Se også disse notatene om Code::Blocks IDE
http://www.futuredesktop.org/codeblocks ... _9.04.html
Du finner noen gode C++ guider i Notat 3). + her...

Erfaren
Brukerens avatar
medlem i 234 måneder
 


Returner til Utvikling i Linux



Hvem er i Forumene

Registrerte brukere: Google [Bot]