C ++这里有一些错误

时间:2012-09-05 07:09:59

标签: c++ string compiler-errors

任何人都可以帮我吗?我是新来的。欢迎任何帮助!

  

9.3.cpp:在构造函数'Address :: Address(int,std :: string.int.std :: string,std :: String,std :: String)'中:   9.3.cpp:29:51:错误:'this'不能用作函数

     

9.3.cpp:在成员函数'int Address :: compareTo(const Address&)'中:   9.3.cpp:39:26:错误:'std :: string'没有名为'compareTo'的成员

#include<iostream>
using namespace std;

class Address {
  int    houseNumber;
  string street;
  int    apartmentNumber;
  string city;
  string state;
  string zipCode; // e.g., "47405-1234"
  Address(int houseNumber, 
          string street, 
          // no apartmentNumber  
          string city, 
          string state, 
          string zipCode) { 
    this->houseNumber = houseNumber; 
    this->street = street; 
    this->city = city; 
    this->state = state; 
    this->zipCode = zipCode; 
  } 
  Address(int houseNumber, 
          string street, 
          int apartmentNumber, 
          string city, 
          string state, 
          string zipCode) { 
    this(houseNumber, street, city, state, zipCode);
    this->apartmentNumber = apartmentNumber; 
  } 
  void print(void) {
         std::cout << "Street: " << street << "\nCity: " 
             << city << "\nState: " << state << "\nPostal Code: " << zipCode;
}

  int compareTo(const Address &a) { 
    // same conventions as for Strings
    return this->zipCode.compareTo(angel); 
  }
};

3 个答案:

答案 0 :(得分:1)

这一行:

this(houseNumber, street, city, state, zipCode);

你不能调用你自己的构造函数,至少不是这样的。 C ++ 11标准中的新功能是使用初始化列表执行此操作的方法:

Address(int houseNumber, 
        string street, 
        int apartmentNumber, 
        string city, 
        string state, 
        string zipCode)
    : Address(houseNumber, street, city, state, zipCode)
{ 
    this->apartmentNumber = apartmentNumber;
}

如果你的编译器还不支持它,那么你必须从第一个构造函数中复制代码,或者将公共初始化放在一个单独的函数中,以便从两个构造函数中调用。

答案 1 :(得分:0)

您不能以这种方式使用this指针

 this(houseNumber, street, city, state, zipCode);

因为它不是一个功能。您似乎正在尝试在其他构造函数中调用类的其他构造函数。这不会像你想要的那样工作 - 你不能像构件函数那样调用构造函数 - 在对象的实例上调用成员函数,而构造函数用于创建对象。您应该像在其他构造函数中一样设置变量,或者使用初始化列表更好地设置变量。

如果您在标题顶部#include<string>,则应解决其他错误。

答案 2 :(得分:0)

您的代码似乎不是C ++,而是Java或C#:C ++使用成员初始化程序列表将构造函数委托给[sub-]对象(并且委托给同一个类的另一个构造函数是C ++中的新成员。使用成员-initializer列表看起来像这样:

class foo
{
    std::string d_val;
public:
    foo(std::string const& val)
        : d_val(val)
    {
    }
    foo()
        : foo("default") // C++ 2011 only
    {
    }
};