Esta vez con un proyecto en "MFC AppWizard (dll)"
el profesor no dios el ejercicio y hay que encontrar errores, luego de resolver el primero me tranque en el segundo error.
quisiera que le hechen un vistaso:
Complejo.cpp
Código
//fichero main.cpp #include "stdafx.h" #include "complejo.h" void main(void) { // declaración de números complejos complejo c1(1.0, 1.0); complejo c2(2.0, 2.0); complejo c3; c3.SetData(); //pide datos para c3 complejo c4(4.0); // operadores aritméticos complejo suma = c1.Suma(c2); //c1+c2 complejo resta = c1.Resta(c3); //c1-c3 complejo producto = c2.Multiplica(c4); //c2*c4 complejo cociente = c1.Cociente(c3); //c1/c3 cout << "Primer complejo: "; c1.Prt(); cout << "Segundo complejo: ";c2.Prt(); cout << "Tercer complejo: "; c3.Prt(); cout << "Suma: " ; suma.Prt(); cout << "Resta: " ; resta.Prt(); cout << "Producto: " ; producto.Prt(); cout << "Cociente: " ; cociente.Prt(); cout << "Ya he terminado." << endl; }
StdAfx.cpp
Código
// stdafx.cpp : source file that includes just the standard includes // complejo.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" #include "complejo.h"
Complejo.h
Código
// fichero complejo.h #include <iostream.h> class complejo { private: double real; double imag; public: // Constructores complejo(); //defecto complejo(double, double im=0.0); // SetThings void SetData(void); void SetReal(double); void SetImag(double); // GetThings double GetReal(void){return real;} double GetImag(void){return imag;} //Operaciones complejo Suma(complejo c); complejo Resta(complejo c); complejo Multiplica(complejo c); complejo Cociente(complejo c); //Salida void Prt(){ cout << "("<< real <<","<< imag<<"i)"<<endl; } }; complejo::complejo() // constructor por defecto { real = 0.0; imag = 0.0; } // constructor general complejo::complejo(double re,double im) { real = re; imag = im; } // función miembro SetData() void complejo::SetData(void) { cout << "Parte real: "; cin >> real; cout << "Parte imaginaria: "; cin >> imag; } void complejo::SetReal(double re) { real = re; } void complejo::SetImag(double im) { imag = im; } complejo complejo::Suma(complejo c) { complejo cs; cs.real = real + c.real; cs.imag = imag + c.imag; return cs; } complejo complejo::Resta(complejo c) { complejo cr; //escribir el código para restar cr.real = real - c.real; cr.imag = imag - c.imag; return cr; } complejo complejo::Multiplica(complejo c) { complejo cm; //escribir el código (a,b) * (c,d) = (ac-bd, ad+bc) cm.real = real * c.real; cm.imag = imag * c.imag; return cm; } complejo complejo::Cociente(complejo c) { complejo cc; //escribir (a,b)/(c,d) = ((ac+bd)/(c^2+d^2) , (bc-ad)/(c^2 + d^2 )) cc.real = real / c.real; cc.imag = imag / c.imag; return cc; }
StdAfx.h
Código
// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #if !defined(AFX_STDAFX_H__7C1B2F84_8EEA_4865_9808_AB1551CD54C1__INCLUDED_) #define AFX_STDAFX_H__7C1B2F84_8EEA_4865_9808_AB1551CD54C1__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components #include <afxext.h> // MFC extensions #ifndef _AFX_NO_OLE_SUPPORT #include <afxole.h> // MFC OLE classes #include <afxodlgs.h> // MFC OLE dialog classes #include <afxdisp.h> // MFC Automation classes #endif // _AFX_NO_OLE_SUPPORT #ifndef _AFX_NO_DB_SUPPORT #include <afxdb.h> // MFC ODBC database classes #endif // _AFX_NO_DB_SUPPORT #ifndef _AFX_NO_DAO_SUPPORT #include <afxdao.h> // MFC DAO database classes #endif // _AFX_NO_DAO_SUPPORT #include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__7C1B2F84_8EEA_4865_9808_AB1551CD54C1__INCLUDED_)
Al Compilar tengo 0 Errores, pero al Ejecutar me da esto:
Código:
StdAfx.obj : error LNK2005: "public: __thiscall complejo::complejo(void)" (??0complejo@@QAE@XZ) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: __thiscall complejo::complejo(double,double)" (??0complejo@@QAE@NN@Z) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: void __thiscall complejo::SetData(void)" (?SetData@complejo@@QAEXXZ) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: void __thiscall complejo::SetReal(double)" (?SetReal@complejo@@QAEXN@Z) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: void __thiscall complejo::SetImag(double)" (?SetImag@complejo@@QAEXN@Z) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: class complejo __thiscall complejo::Suma(class complejo)" (?Suma@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: class complejo __thiscall complejo::Resta(class complejo)" (?Resta@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: class complejo __thiscall complejo::Multiplica(class complejo)" (?Multiplica@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj
StdAfx.obj : error LNK2005: "public: class complejo __thiscall complejo::Cociente(class complejo)" (?Cociente@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj
StdAfx.obj : warning LNK4006: "public: __thiscall complejo::complejo(void)" (??0complejo@@QAE@XZ) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: __thiscall complejo::complejo(double,double)" (??0complejo@@QAE@NN@Z) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: void __thiscall complejo::SetData(void)" (?SetData@complejo@@QAEXXZ) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: void __thiscall complejo::SetReal(double)" (?SetReal@complejo@@QAEXN@Z) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: void __thiscall complejo::SetImag(double)" (?SetImag@complejo@@QAEXN@Z) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: class complejo __thiscall complejo::Suma(class complejo)" (?Suma@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: class complejo __thiscall complejo::Resta(class complejo)" (?Resta@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: class complejo __thiscall complejo::Multiplica(class complejo)" (?Multiplica@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj; second definition ignored
StdAfx.obj : warning LNK4006: "public: class complejo __thiscall complejo::Cociente(class complejo)" (?Cociente@complejo@@QAE?AV1@V1@@Z) already defined in complejo.obj; second definition ignored
Creating library Debug/complejo.lib and object Debug/complejo.exp
Debug/complejo.dll : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
Tengo rato buscando el error y no doy, segun veo en foros gringos que leo, que el problema es en las cabezeras pero nada no doy
Salu2