Перегруженные функции, переопределения, C2371 и C2556 C ++ - PullRequest
0 голосов
/ 22 марта 2012

Хорошо, поэтому у меня есть 3 файла:

definitions.h, который содержит

#ifndef COMPLEX_H 
#define COMPLEX_H 
class Complex
{

char type; //polar or rectangular
double real; //real value 
double imaginary; //imaginary value
double length; //length if polar
double angle; //angle if polar

 public:
//constructors
Complex();
~Complex();
void setLength(double lgth){ length=lgth;}
void setAngle(double agl){ angle=agl;}
double topolar(double rl, double img, double lgth, double agl);
#endif

functions.cpp, который содержит

#include "Class definitions.h"
#include <iostream>
#include <fstream>
#include <iomanip> 
#include <string.h>
#include <math.h>
#include <cmath>
#include <vector>
using namespace std;

Complex::topolar(double rl, double img, double lgth, double agl)
{
real=rl;
imaginary=img;  
lgth = sqrt(pow(real,2)+pow(imaginary,2));
agl = atan(imaginary/real);
Complex::setLength(lgth);
Complex::setAngle(agl);

return rl;
return img;
return lgth;
return agl;

}

и основную программусодержит:

#include "Class definitions.h"
#include <iostream>
#include <fstream>
#include <iomanip> 
#include <string.h>
#include <cmath>
#include <vector>
using namespace std;

int main(){

vector<Complex> v;
Complex *c1;
double a,b,d=0,e=0;
c1=new Complex;
v.push_back(*c1);
v[count].topolar(a,b,d,e);

Но я продолжаю получать ошибку C2371: переопределение;различные базовые типы и C2556: перегруженная функция отличается только типом возврата

все, что я нашел в Интернете, говорит о том, что файл function.cpp не включен в основной, но, поскольку я не допустил этой ошибки, яИсчезают идеи, особенно если учесть, что все мои другие функции, которые настроены таким же образом (с отдельным определением и объявлением), работают.

Любая помощь будет отличной!Спасибо H x

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Ваша функция topolar определена как возвращающая double, но реализация не имеет типа возврата.Я не уверен, является ли это ошибкой , но это, безусловно, ошибка.Вам нужно

double Complex::topolar(double rl, double img, double lgth, double agl)

в реализации.

Более того, вы, похоже, имеете много операторов возврата в реализации.Это тоже ошибка.Только первый из них будет иметь эффект:

return rl; // function returns here. The following returns are never reached.
return img;
return lgth;
return agl;
2 голосов
/ 22 марта 2012

Как объявлено, функция topolar должна возвращать double, но определение в functions.cpp не говорит, что

Complex::topolar(double rl, double img, double lgth, double agl)
{

попробуйте изменить это значение на

double Complex::topolar(double rl, double img, double lgth, double agl)
{
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...