【问题标题】:Compiler shows undefined structure error while declaring a class编译器在声明类时显示未定义的结构错误
【发布时间】:2017-06-01 13:13:33
【问题描述】:

错误信息:

Link to full program

class AddressBook
{
private:   
char firstname[20];
char lastname[20];
char no[15];

class adrs
{
public:
char postal[100];
char pincode[7];
friend void say();
friend void Add();
friend void Edit();
friend void View(int);
}address;
char dob[11];
char email[50];

public:
friend void say();
void sort(AddressBook []);
void NumberSort(AddressBook []);
void Add(void);
void Delete(AddressBook [], int pos);
void Edit();
void LinearSearch(AddressBook [], char a[]);
friend void ViewAll();
void View(int);
void FetchContact();
};

这是一个通讯录程序类的声明。

 void sort(AddressBook []);
 void NumberSort(AddressBook []); 
 void Delete(AddressBook [], int pos); 
 void LinearSearch(AddressBook [], char a[]);

上述声明中的这些行在 TurboC++ 编译器中显示为错误。谁能告诉我为什么?

【问题讨论】:

  • 您会将错误信息粘贴到问题中吗?您在声明类时提到了未定义的结构错误。我在你的代码中没有看到结构?
  • 将这些函数作为成员函数对我来说没有多大意义。
  • 你知道TurboC++至少有20年了吗?使用更现代的编译器/IDE 会更好
  • 请详细说明您的问题,并可能发布minimal reproducible example。我的编译器接受 class AddressBook 声明以及您在问题中提到的其他声明。 确切的错误消息是什么?它发生在哪一行确切
  • @JohnSmith 你只展示了一部分代码。也许这就是为什么它在这里编译得很好。请发送minimal reproducible example。这需要一些工作,但没有这些就很难提供帮助。您在问题中显示的代码没有明显错误。问题可能来自您没有显示的代码部分。

标签: c++ compiler-errors turbo-c++


【解决方案1】:

在 C++ 中,当数组作为参数传递时,其初始地址将传递给形参。借助这种技术,代码可以编写如下

 void sort(AddressBook*);
 void NumberSort(AddressBook*); 
 void Delete(AddressBook*, int pos); 
 void LinearSearch(AddressBook*, char a[]);

我已经为我的问题实现了同样的东西,它确实有效。

【讨论】:

  • 是的,但不是问题的重点,因为这已经是代码正在做的事情(函数参数中的T[] 正好是T*) - 关键点是@ 987654324@ 表单无论出于何种原因都不受支持。
【解决方案2】:

由于您无法生成最小示例,因此我为您完成了:

class AddressBook
{
  void sort(AddressBook[]);
};

此声明在现代编译器上编译得很好,但在 Turbo C++ 上却不行。 您可以称其为编译器错误。

有两种选择:

  • 你重新思考你的程序并以另一种方式编写它
  • 您使用的是现代 C++ 编译器

转学将是另一个有价值的选择。

【讨论】:

  • 哦。 K. 非常感谢...知道为什么这在 TurboC++ 上不起作用吗?
  • @JohnSmith 可能是因为它是一个古老的、不符合标准的编译器。
  • @JohnSmith 可能是因为它甚至早于标准 C++ 的最旧版本。也就是说,它是在标准 C++ 存在之前被编程和分发的,因此缺乏 C++ 的某些特性。这就是你不应该使用它的真正原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多