C ++ Как использовать другой (определяемый пользователем) класс в качестве аргумента в конструкторе класса

Кажется, я нигде не могу найти это именно так, надеюсь, об этом раньше не спрашивали. Я переучиваю c ++ и хотел попытаться решить проблему, с которой столкнулся в прошлый раз, но не смог решить; создание 2 сложных классов (декартовых и полярных), которые имеют конструкторы с аргументами друг друга. У меня проблема в том, что первый класс, похоже, не распознает второй класс, и я не могу использовать его в конструкторе.

Сокращенная версия моего кода:

class complex_ab{
friend class complex_rt;

public:
complex_ab(): a(0), b(0) { }
complex_ab(const double x, const double y): a(x), b(y) { }
complex_ab(complex_rt);
~complex_ab() { }

private:
double a, b;
};

class complex_rt{
friend class complex_ab;
public:
complex_rt(): r(0), theta(0) { }
complex_rt(const double x, const double y): r(x), theta(y) { }
complex_rt(complex_ab);
~complex_rt() { }

private:
double r, theta;
};

и .cpp файл

#include "complex.h"#include <cmath>
#include <iostream>
using namespace std;

complex_ab::complex_ab(complex_rt polar){
a = polar.r * cos(polar.theta);
b = polar.r * sin(polar.theta);
}
complex_rt::complex_rt(complex_ab cart){
r = sqrt(cart.a * cart.a + cart.b * cart.b);
theta = atan(cart.b/cart.a);
}

Основной файл в настоящее время просто возвращает 0, пока я пытаюсь его скомпилировать. Я получаю ошибки

error: field 'complex_rt' has incomplete type 'complex_ab'
complex_ab(complex_rt);
^
note: definition of 'class complex_ab' is not complete until the closing brace
class complex_ab{

который я получаю дважды по какой-то причине, а затем

error: expected constructor, destructor, or type conversion before '(' token
complex_ab::complex_ab(complex_rt polar){
^

Я знаю, что, вероятно, было бы лучше попытаться сделать все это в одном классе, но это будет беспокоить меня, если я оставлю это нерешенным, любая помощь будет принята с благодарностью!

0

Решение

Вам просто нужно явно объявить вперед complex_rt, как friend декларация, кажется, не делает этого:

class complex_rt;

class complex_ab{
friend class complex_rt;
...

Полный пример: http://ideone.com/Q8GkQh

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector