Ошибка отсутствия аргументов шаблона - PullRequest
1 голос
/ 31 октября 2011

У меня есть следующий код:

#ifndef CURRENCY_H_   
#define CURRENCY_H_   

class currency   
{   
public:   
    enum signType {plus, minus};   
    currency(signType theSign = plus, unsigned long theDollars = 0, unsigned int theCents = 0);    
    ~currency(){};   
    void setValue(signType, unsigned long, unsigned int);   
    void setValue(double);   
    signType getSign() const {return sign;};   
    unsigned long getDollars() const {return dollars;};    
    unsigned int getCents() const {return cents;};   
    currency add(const currency&) const;   
    currency& increment(const currency&);   
    void output() const;   

private:   
    signType sign;   
    unsigned long dollars;   
    unsigned int cents;   
}; 

#endif   

Реализация конструктора и метода setValue:

currency::currency(signType theSign, unsigned long theDollars, unsigned int theCents)
{
    setValue(theSign, theDollars, theCents);
}

void currency::setValue(signType theSign, unsigned long theDollars, unsigned int theCents)
{
    if(theCents > 99)
        throw invalid_argument("Cents should be < 100");

    this.sign = theSign;
    dollars = theDollars;
    cents = theCents;
}

Когда я пытаюсь создать объект валюты, например:

currency cur = currency(minus, 2, 25);

Я получил ошибку:

error: expected primary-expression before ‘(’ token

Я могу создать пустой объект валюты (без ошибок), например:

currency cur;

но когда я вызываю метод setValue:

cur.setValue(minus, 2, 25);

ошибка появляется снова:

error: missing template arguments before ‘,’ token

Любой совет / идея?

Ответы [ 3 ]

3 голосов
/ 31 октября 2011

У вас есть перекрывающиеся имена символов.minus ваш компилятор считает, что вы хотите std::minus<T>.Вы хотите использовать currency::minus, поэтому вам нужно явно указать это:

currency cur = currency(currency::minus, 2, 25);
2 голосов
/ 31 октября 2011

Попробуйте currency::minus.

У вас есть using namespace std где-нибудь?Там есть std::minus.

2 голосов
/ 31 октября 2011

Если я не ошибаюсь, вы используете примеры кода вне класса валюты. Если это так, значение enum «минус» не определено (или, вероятно, чем-то другим, кроме вас). Чтобы действительно ссылаться на ваше перечисление signType, вы должны использовать правильную область видимости, т.е.

cur.setValue(currency::minus, 2, 25);

edit: то же самое для конструктора:

currency(currency::minus, 2, 25);

Внутри класса вы, конечно, можете просто сослаться на минус .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...