2015-10-15 3 views
1

Я новичок в C++, но я работаю над проектом, занимающимся выполнением разных операций с наборами, и один из них просто распечатывает его, если множество конечно. SoS - используемый объект, который просто обозначает набор строк и имеет вектор строк и логический элемент в качестве своих элементов данных. Я создал функцию, чтобы проверить, является ли набор конечным, и я пытаюсь вызвать его в своей функции печати, но я продолжаю получать сообщение об ошибке «no member named» isFinite. «Heres, что у меня есть, любая помощь очень ценится.C++ с использованием функций внутри функций

void SoS::print() const{ 
    if (m_vos.isFinite() == true){ 
     for (int i = 0; i < m_vos.size(); i++){ 
      cout << m_vos[i]<< endl; 
     } 
    } 
    else{ 
     cout << "COMPLEMENT OF:"<< endl; 
     for (int i = 0; i< m_vos.size(); i++){ 
      cout << m_vos[i]<< endl; 
     } 
    } 
} 

bool SoS::isFinite() const{ 
    if (isfinite(m_vos.size()){ 
     return true; 
    } 
    return false; 
} 
+0

ли это говоря 'ни один член не назвал«isFinite»' или это говорят 'ни один член не назвал«isfinite»' ? В методе 'isFinite' вы вызываете' isfinite'. Также 'isFinite' не имеет никаких параметров. И если ваша первая строка метода вызывает указанный метод, вы получите бесконечную рекурсию. –

+0

Что такое 'm_vos'? Он выглядит как член 'SoS', но не является указателем. Вам нужно вызвать 'SoS :: isFinite()' на объект 'SoS', или вы можете вызвать его из другого метода' SoS'. – Tas

+0

@Tas 'm_vos' может быть элементом-значением, а не всем объектам нужны указатели для их использования. – Dai

ответ

0

Проблема заключается в том, что вы пытаетесь позвонить SoS::isFinite() по телефону std::vector<std::string> (m_vos). std::vector не имеет такого члена. Вы можете позвонить только SoS::isFinite() на объект типа SoS или в пределах функции SoS.

К счастью, вы в SoS функции, так что вы можете просто изменить свой код:

void SoS::print() const{ 
    // Calls SoS::isFinite() 
    if (isFinite() == true){ 
+0

Спасибо! Это решило мою проблему. –

4

C++, как и C, требует прямого объявления из-за характера его однопроходного проекта компилятора. В C++ это обычно не проблема, поскольку класс полностью объявлен в файле заголовка перед файлом .cpp, но сообщение об ошибке предлагает Вам не конкретизированы-вашу декларацию класса

Он должен выглядеть следующим образом (в соответствии с описанием.):

class SoS { 
private: 
    vector<string> m_vos; 
    bool someBool; 
public: 
    void print() const; 
    bool isFinite() const; 
} 
+0

OP также нуждается в 'bool isfinite (param)' в его файле заголовка, если он не объявлен глобально или в том же пространстве имен. –

+1

@JonnyHenly Не обязательно, 'isinfinite' может быть глобальной функцией. – Dai

+0

Если 'm_vos' действительно является' std :: vector ', было бы ошибкой вызывать' m_vos.isFinite() ', поэтому проблема была бы" no member named 'isFinite()' "в' std: : vector' – Tas

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