2016-01-15 3 views
1

Моя проблемаПерегрузка функции ambigious

У меня есть это как заголовки функций:

const FlowTools::LocalFlow <double>& harmonic(const int i, const int j, const int k) const; 

const FlowTools::LocalFlow < std::complex <double> >& harmonic(const int i, const int j, const int k, const int f) const; 

LocalFlow это просто класс, который имеет пять физических параметров (скорость 3D, плотность и давление). Я хочу, чтобы получил только двойное значение, если в заголовке нет частотного параметра. Прямой компонент также указывает, если вы пишете f=0 в заголовке, но в этом случае я получаю сложное значение. Мне не хотелось бы редактировать всю программу следующим образом: xxx.harmonic(). Real(). Перед перегрузкой функции он вызывает flowField(int i, int j, int k). Я делаю рефакторинг.

Теперь я тестирую функцию с Test Google (блок библиотеки тестирования для C++), как это:

ASSERT_THROW(xxx.harmonic(d,d,d), ERROR); 

ASSERT_THROW(xxx.harmonic(d,d,d,0), ERROR); 

... И получить эту ошибку для первой функции:

'ASSERT_THROW(xxx.harmonic(d,d,d), ERROR) 'неоднозначные' Кандидаты являются:

FlowTools::LocalFlow<double> & harmonic(int, int, int)

FlowTools::LocalFlow<std::complex<double>> & harmonic(int, int, int, int) '

Какая у меня ошибка?

+0

отступа код с четырьмя пробелами (или выберите его затем Ctrl + K). – Jarod42

ответ

1

Удалить f = 0, чтобы он больше не был двусмысленным.

Таким образом, вместо

const FlowTools::LocalFlow<double>& 
harmonic(int i, int j, int k) const; 

const FlowTools::LocalFlow<std::complex<double>>& 
harmonic(int i, int j, int k, int f = 0) const; 
// f = 0 make ambiguous call when not provided 

использование

const FlowTools::LocalFlow<double>& 
harmonic(int i, int j, int k) const; 

const FlowTools::LocalFlow<std::complex<double>>& 
harmonic(int i, int j, int k, int f) const; 
+0

Спасибо, но я не определил значение по умолчанию f = 0. Мои примеры функций в верхней части показывают, как он реализован и есть как ваш. –

+0

@ D.Mogwitz: Тогда вам нужно предоставить больше кода. – Jarod42

+0

что вы хотите, чтобы увидеть больше? –

Смежные вопросы