【问题标题】:Having trouble with string array searching for another string in my function字符串数组在我的函数中搜索另一个字符串时遇到问题
【发布时间】:2013-12-04 02:05:52
【问题描述】:

我一直收到一个错误,说我需要一个类类型,但我有一个声明。我不确定我做错了什么。 我在使用布尔 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);
       }

【问题讨论】:

  • return (Seller::name[MAX_NAME_LEN].compare(hasname[MAX_NAME_LEN]) == 0)
  • 它不喜欢 Seller::name
  • 第 4 行 Seller ( char name[] ) 看起来像一个函数声明,没有声明返回类型,也没有分号。以下 6 行看起来像一个变量声明,但没有指定类型。这是 C++ 吗?
  • 这是我不熟悉的 C++ 语法吗?
  • @Michael 它被称为构造函数:)。但是,是的,该参数未被使用,并且构造函数主体中的 6 行中有 5 行不执行任何操作。最重要的是,第 1 行,salestotal 的初始化可以使用大括号或等号初始化器更好地完成,以避免重复。

标签: c++ string string-comparison


【解决方案1】:

该错误是由Seller::name[MAX_NAME_LEN] 中的Seller:: 前缀引起的。不需要在类成员变量前面加上类名;只需写: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);
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多