字符串数组在我的函数中搜索另一个字符串时遇到问题

时间:2013-12-04 02:05:53

标签: c++ string string-comparison

我一直收到一个错误,说我需要一个班级类型。我不确定我做错了什么。 我在使用bool SellerHasName时遇到了麻烦。

  enum ComputerType { DESKTOP, LAPTOP, TABLET, HANDHELD };
  const int MAX_NAME_LEN = 51;

 class Seller
{
private:
        float salestotal;
        int computersSold[NUM_COMPUTER_TYPES];
        char name[MAX_NAME_LEN];

public:
// default constructor
       Seller()
       {
          name[MAX_NAME_LEN];
          salestotal = 0.0;
          computersSold[DESKTOP];
          computersSold[LAPTOP];
          computersSold[TABLET];
          computersSold[HANDHELD];

       }
       Seller ( char name[] ) 
       {
          name[MAX_NAME_LEN];
          salestotal = 0.0;
          computersSold[DESKTOP];
          computersSold[LAPTOP];
          computersSold[TABLET];
          computersSold[HANDHELD];
       }
       // Returns true if the seller's name is the same as nameToSearch;
       // false otherwise.
       // Params: in
       bool SellerHasName ( char hasname[] ) const
       {
          return (Seller::name[MAX_NAME_LEN].compare(hasname[MAX_NAME_LEN]) == 0);
       }

1 个答案:

答案 0 :(得分:0)

错误是由Seller::中的Seller::name[MAX_NAME_LEN]前缀引起的。不需要使用类名称为类成员变量添加前缀;只需写下:name[MAX_NAME_LEN]


由于您使用的是C ++而不是C,因此请忘记C风格的数组。特别是,C ++中的char数组几乎总是一个坏主意。使用std::stringstd::array(或std::vector就此而言)事情变得更加简单,因此可以维护:

class Seller {
private:
    float salestotal;
    std::array<int, NUM_COMPUTER_TYPES> computersSold;
    std::string name;
public:
    Seller()
      : salestotal(0.0)
      {}

    Seller (const std::string& nm)
      : name(nm)
      , salestotal(0.0)
      {}

    bool SellerHasName(const std::string& nm) const {
        return (name == nm);
    }
};