Почему XCode не распознает argc? - PullRequest
2 голосов
/ 26 сентября 2019

Я хочу проверить, передал ли вызывающий объект значение для outOf, а если нет, то я хочу использовать значение по умолчанию.Я провел онлайн-исследование и увидел, что вы можете использовать argc, чтобы узнать, сколько переменных передано.Я попытался использовать это в приведенном ниже коде, но я получил следующую ошибку

Use of undeclared identifier 'argc'

Как я могу исправить приведенный ниже код?

 #include "Mark.h"
 #include <iostream>


using namespace std;


void Mark::set(int displayMode){
    m_displayMode= displayMode;
}

void Mark:: set(double mark, int outOf){
    m_mark= mark;
    if ( int argc < 2){
        m_outOf=1;
    }else{
        m_outOf=outOf;
    }


}
void Mark:: Mark ::setEmpty(){
    m_displayMode= DSP_UNDEFINED;
    m_mark=-1;
    m_outOf = 100;

}

bool Mark:: isEmpty()const{
    bool result= true;
    if((m_displayMode==DSP_UNDEFINED) && (m_mark==-1) && (m_outOf==100)){
        result =true;
    }else{
         result = false;
    }
    return result;
}

основная функция

m2.setEmpty();
    cout << "Setting m2 to the raw value of m1..." << endl;
    m2.set(m1.rawValue());
    cout << "done!" << endl;
    cout << "m2: The mark is: ";
    m2.set(DSP_ASIS);
    m2.display() << endl;
    cout << "m2: With the raw value of: ";
    m2.set(DSP_RAW);
    m2.display() << endl;
    cout << "m2: And percentage value of: ";
    m2.set(DSP_PERCENT);
    m2.display() << endl;

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы обнаружили, что ваше исследование состоит в том, что argc используется в main, чтобы определить, сколько аргументов командной строки было передано программе при ее вызове.Это не то, что вам нужно.

Поскольку set принимает два параметра, вызывающая сторона всегда должна будет указывать outOf.Это означает, что вам никогда не нужно проверять, был ли он поставлен.Если вы хотите иметь возможность вызывать set с или без предоставления outOf, тогда вам нужен аргумент по умолчанию для outOf, который будет использоваться кодом, если вызывающий не предоставит его.Это изменит ваш set на

void Mark::set(double mark, int outOf = 1){
    m_mark= mark;
    m_outOf=outOf;
}

И теперь m_outOf будет установлен на 1, если вы вызовете набор, подобный foo.set(1), и будет установлен на значение N, если выЗвоните set как foo.set(1, N);

1 голос
/ 27 сентября 2019

Существует два допустимых объявления для main:

int main()

и

int main(int argc, char** argv)

Если вы хотите посмотреть на аргументы командной строки, вы используете второй.

...