[C++] Erreurs de compilation !

Résolu/Fermé
Utilisateur anonyme - 17 déc. 2007 à 10:56
 Utilisateur anonyme - 17 déc. 2007 à 13:24
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 :)

6 réponses

Utilisateur anonyme
17 déc. 2007 à 11:21
as tu enregistré ton code
0
Utilisateur anonyme
17 déc. 2007 à 11:54
Oui, bien sûr !
0
Bonjour

Dans quel environnement travailles-tu ? Comment essayes-tu de l'exécuter ?
0
Utilisateur anonyme
17 déc. 2007 à 12:06
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 déc. 2007 à 12:19
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
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
Utilisateur anonyme
17 déc. 2007 à 13:24
Merci infiniment, mon programme s'exécute normalement :D
0