[C++] Erreurs de compilation !

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

Mon programme ne s'exécute pas et je n'arrive pas à détecter mes erreurs :
Voilà le code :

#include<iostream>
using namespace std;

class C
{
	int *v;
public:
	C(int x);
~C();
C(C c);
int getv();
};
C::C(int x)
{
	v=new int(x);
	cout<<"objet cree..."<<endl;
}
C::~C()
{
	delete v;
	cout<<"objet detruit..."<<endl;
}
C::C(C c)
{
	v=new int(c.v);
	cout<<"objet cree par recopie..."<<endl;
}
int C::getv()
{
	return *v;
}
void f(C c)
{
	cout<<"la valeur de V = "<<c->getv()<<endl;
}
void main()
{
	C c1(0), c2(1), c3(2), c4;
	C *p;
	cout<<c2.getv()<<endl;
	f(c3);
	p=new C(4);
	f(p);
	cout<<p->getv();
	delete p;
}

Merci de vos réponses :)

--

La foudre et l'amour laissent les vêtements intacts et le coeur 
en cendre...
Configuration: Windows XP
Internet Explorer 6.0

6 réponses

  1. Utilisateur anonyme
     
    as tu enregistré ton code
    0
    1. Utilisateur anonyme
       
      Oui, bien sûr !
      0
  2. le père
     
    Bonjour

    Dans quel environnement travailles-tu ? Comment essayes-tu de l'exécuter ?
    0
    1. Utilisateur anonyme
       
      Resalut,
      Je suis sous Microsoft Visual Studio 2005 (.Net)
      Je fais ctrl+F7 pour compiler et ctrl+F5 pour exécuter.
      Le champ de mort comme nous l'appelons est le suivant :

      1>------ Build started: Project: ex2tp3, Configuration: Debug Win32 ------
      1>Compiling...
      1>main.cpp
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(10) : error C2652: 'C' : illegal copy constructor: first parameter must not be a 'C'
      1> c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(5) : see declaration of 'C'
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(25) : error C2440: 'initializing' : cannot convert from 'int *' to 'int'
      1> There is no context in which this conversion is possible
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(34) : error C2819: type 'C' does not have an overloaded member 'operator ->'
      1> c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(5) : see declaration of 'C'
      1> did you intend to use '.' instead?
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(34) : error C2232: '->C::getv' : left operand has 'class' type, use '.'
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(38) : error C2512: 'C' : no appropriate default constructor available
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(41) : error C2664: 'f' : cannot convert parameter 1 from 'C' to 'C'
      1> Cannot copy construct class 'C' due to ambiguous copy constructors or no available copy constructor
      1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex2tp3\ex2tp3\main.cpp(43) : error C2664: 'f' : cannot convert parameter 1 from 'C *' to 'C'
      1> No constructor could take the source type, or constructor overload resolution was ambiguous
      1>Build log was saved at "file://c:\Documents and Settings\khaoula\Mes documents\Visual Studio 2005\Projects\ex2tp3\ex2tp3\Debug\BuildLog.htm"
      1>ex2tp3 - 7 error(s), 0 warning(s)
      ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
      0
  3. le père
     
    Re-Bonjour

    Ton titre parle d'erreur de compilation, pas d'éxécution.
    Si ton problème est à la compilation, quel(s) message(s) d'erreur obtiens-tu ?
    0
  4. le père
     
    mauvaise déclaration de constructeur par recopie + joyeux mélimélo de pointeurs et de variables pointées...

    // vcconsole.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    
    class C
    {
    	int *v;
    public:
    	C(int x);
    ~C();
    C(const C& c);
    int getv();
    };
    
    C::C(int x)
    {
    	v=new int(x);
    	cout<<"objet cree..."<<endl;
    }
    C::~C()
    {
    	delete v;
    	cout<<"objet detruit..."<<endl;
    }
    C::C(const C& c)
    {
    	v=new int( *c.v );
    	cout<<"objet cree par recopie..."<<endl;
    }
    int C::getv()
    {
    	return *v;
    }
    void f(C c)
    {
    	cout<<"la valeur de V = "<<c.getv()<<endl;
    }
    void main()
    {
    	C c1(0), c2(1), c3(2), c4(3);
    	C *p;
    	cout<<c2.getv()<<endl;
    	f(c3);
    	p=new C(4);
    	f(*p);
    	cout<<p->getv();
    	delete p;
    }
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    J'ai horreur du constructeur par recopie !! beurk :(

    Merci, mais apparemment mon IDE ne comprend pas le : #include "stdafx.h"

    Quand je compile, il me génére cette erreur :

    fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory.

    C'est la première fois que je vois de tel préprocesseur :)
    0
  7. le père
     
    Merci, mais apparemment mon IDE ne comprend pas le : #include "stdafx.h"
    Pardon, c'est parce que je travaille sous VC++. supprime cet include, il ne te concerne pas
    0
    1. Utilisateur anonyme
       
      Merci infiniment, mon programme s'exécute normalement :D
      0