Запутанная ошибка компилятора C ++ "не может преобразовать 'X' в 'double' в ответ - PullRequest
1 голос
/ 23 июня 2011

Я относительно новичок в программировании на C ++ и создании небольшой программы на Dev C ++, которая производит следующий вывод компилятора:

Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\s0237326\My Documents\Postgrad_Research_Sync_Folder\C_Projects\mfemm2\Makefile.win"
Executing  make...
make.exe -f "C:\Documents and Settings\s0237326\My Documents\Postgrad_Research_Sync_Folder\C_Projects\mfemm2\Makefile.win" all
g++.exe -c NOSEBL.CPP -o NOSEBL.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"   

NOSEBL.CPP: In member function `double femmedata::CNode::GetDistance(double, double)':
NOSEBL.CPP:24: error: cannot convert `CComplex' to `double' in return

NOSEBL.CPP: In member function `double femmedata::CBlockLabel::GetDistance(double, double)':
NOSEBL.CPP:108: error: cannot convert `CComplex' to `double' in return

make.exe: *** [NOSEBL.o] Error 1

Execution terminated

Проблема связана с реализацией моего класса CNode с функцией 'femmedata :: CNode :: GetDistance (double, double)', показанной ниже, с номером строки, показывающим местоположение ошибки.

22 double CNode::GetDistance(double xo, double yo)
23  {
24      return sqrt((x-xo)*(x-xo) + (y-yo)*(y-yo));
25  }

Определение класса CNode показано ниже:

class CNode
{
    public:
        CNode();

        double x,y;
        int xs,ys;
        bool IsSelected;
        CStdString BoundaryMarker;
        int InGroup;

        double GetDistance(double xo, double yo);
        CComplex CC();
        void ToggleSelect();

    private:

};

Класс CNode объявлен в NOSEBL.h, а реализация содержится в NOSEBL.cpp. Эти файлы также содержат другие определения и реализации классов. Тем не менее, тип CComplex определен в других местах в complex.h и complex.cpp, и представлен здесь посредством включения файла заголовка.

Ранее я создавал программу в VC ++ 2010 Express Edition без проблем, поэтому не знаю, в чем здесь проблема. В случае, если это уместно, следующие несколько строк текста после функции GetDistance показаны ниже, которые ссылаются на тип CComplex.

CComplex CNode::CC()
{
    return CComplex(x,y);
}

Спасибо

РЕДАКТИРОВАТЬ 1

NOSEBL.CPP: In member function `double femmedata::CNode::GetDistance(double, double)':
NOSEBL.CPP:24: error: `class CComplex' used where a floating point value was expected
NOSEBL.CPP:24: error: aggregate value used where a float was expected

NOSEBL.CPP: In member function `double femmedata::CBlockLabel::GetDistance(double, double)':
NOSEBL.CPP:108: error: cannot convert `CComplex' to `double' in return

make.exe: *** [NOSEBL.o] Error 1

1 Ответ

4 голосов
/ 23 июня 2011

Проблема в том, что вы получаете неправильную sqrt функцию.Вы, кажется, включили заголовок <complex>, но не заголовок <cmath>.Параметр double переводится в параметр complex, поскольку версия sqrt, которая принимает double, неизвестна компилятору в этот момент.

...