C ++ Ошибка строки для символа - PullRequest
0 голосов
/ 20 марта 2012

Я относительно новичок в C ++, и у меня проблема с передачей строки.У меня есть 2 конструктора для класса, Transaction. "Один конструктор принимает строку и double в качестве параметров, а другой принимает только строку.

Когда я пытаюсь пропустить строки ниже, я получаю ошибку, говоря:

no matching function for call to 'Account::addTransaction(const char [14])'

или

no matching function for call to 'Account::addTransaction(const char [11], double&)'

Я знаю, что нет соответствующей функции, потому что я передаю строку! Вот что я передаю:

bank.getAccount(index).addTransaction("Close Account");
bank.getAccount(index).addTransaction("Withdrawal", amount_to_withdraw);

Я не знаю, как сделать более явным, что первый параметр - это строка. Любой совет будет принят с благодарностью.

Спасибо, Адам

Обновление за @Запрос g24l:

Вот класс транзакций:

#ifndef TRANSACTION_H
#define TRANSACTION_H

#include <iostream>
#include <string>
using namespace std;

class Transaction {

private:
    string transType;
    double transAmount;

/*
 public constructors:
 * 1st constructor is the default constructor
 * 2nd constructor is for non-monetary transactions
 * 3rd constructor is for transactions involving money
 */
public:
    Transaction() {
        transType = "";
    }
    Transaction(string tType) {
        transType = tType;
    }

    Transaction(string tType, double tAmount) {
        transType = tType;
        transAmount = tAmount;
    }

    void setTransType(string);
    void setTransAmount(double);

    string getTransType() const;
    double getTransAmount() const;
};
#endif  /* TRANSACTION_H */

В классе Account, который использует динамическое выделение памяти для массива транзакций, я имею:

class Account{
private:
    Depositor depositor;
    int accountNum;
    string accountType;
    double accountBalance;
    string accountStatus;
    Transaction *transptr;
    int numTransactions; //number of transactions

public:
    // public member functions prototypes

    // Constructors

    /* Account default constructor:
     * Input:
     *  Depositor() - calls the default depositor constructor
     * Process:
     *  sets object's data members to default values
     * Output:
     *  object's data members are set
     */

    Account()
    {
        //cout << "Account default constructor is running" << endl;
        Depositor();
        accountNum = 0;
        accountType = "";
        accountBalance = 0.0;
        accountStatus = "open";
        transptr = new Transaction[100];
        numTransactions = 0;
    }

Мне интересно, если при объявлении массива транзакций он заполняет все транзакции параметрами конструктора по умолчанию. Когда я "добавляю" транзакцию, я действительно перезаписываю существующую транзакцию.

Ответы [ 3 ]

1 голос
/ 20 марта 2012

bank.getAccount.addTransaction принимает Transaction в качестве параметра. Так передайте это одно:

bank.getAccount(index).addTransaction(Transaction("Close Account"));
bank.getAccount(index).addTransaction(Transaction("Withdrawal", amount_to_withdraw));
1 голос
/ 20 марта 2012

просто оберните его в std :: string

bank.getAccount(index).addTransaction(std::string("Close Account"));
0 голосов
/ 20 марта 2012

Нет, "Close Account" - это указатель на массив символов, оканчивающийся символом NUL - это делает его строкой в ​​стиле C, но не строкой C ++. Если вы хотите, чтобы она была строкой, создайте ее явно:

bank.getAccount(index).addTransaction(std::string("Close Account"));

(или добавьте варианты addTransaction, которые также принимают char * в качестве первого аргумента, хотя я бы сам не советовал).

...