结构的问题
Problems with struct
所以我的代码中有两种类型的问题。。。一般形式有:
"的左侧…必须具有类/结构/联合":
doc.id[j] = NULL;
doc.ISBN[j] = NULL;
doc.title[j] = NULL;
doc.year[j] = NULL;
以及"'doc'使用未定义的结构'main::m_doc'"
struct m_doc doc;
而结构体mdoc-doc包含在每个函数的顶部。
这是我的结构:
struct m_doc{
char id[30];
int ISBN[30];
char title[50];
char author[50];
int year[30];
};
我的拳头功能:
void menudoc()
{ struct m_doc doc;
int c = 0, a = 0, b;
cout << "1. Them tai lieu moi" << endl;
cout << "2. Xoa tai lieu" << endl;
cout << "3. Bao cao theo nam xuat ban" << endl;
cout << "0. Tro lai menu truoc" << endl;
cout << "Ban chon:";
cin >> b;
switch (b)
{
case 1:
{
for (int i = 0;; i++)
{
if (doc.id[i] == NULL && doc.ISBN[i] == NULL && doc.title[i] == NULL && doc.author[i] == NULL && doc.year[i] == NULL)
{
i = c; break;
}
else continue;
}
cin >> doc.author[c] ;
cin >> doc.id[c] ;
cin >> doc.ISBN[c] ;
cin >> doc.title[c];
cin >> doc.year[c];
for (int i = 0;; i++){
for (int j = 1;; j++){
if (doc.id[i] == doc.id[j]){
doc.author[j] = NULL;
doc.id[j] = NULL;
doc.ISBN[j] = NULL;
doc.title[j] = NULL;
doc.year[j] = NULL;
}
if (doc.year[i]<1000 || doc.year[i]>9999){
doc.author[i] = NULL;
doc.id[i] = NULL;
doc.ISBN[i] = NULL;
doc.title[i] = NULL;
doc.year[i] = NULL;
}
}
}
break;
}
case 2:
{
int x;
char docid[50];
cout << "IDDOC: ";
cin >> docid[50];
cout << "n";
for (int i = 0;; i++){
if (docid[50] == doc.id[i]) {
doc.author[i] = NULL;
doc.id[i] = NULL;
doc.ISBN[i] = NULL;
doc.title[i] = NULL;
doc.year[i] = NULL;
x++;
}
}
if (x == 0) cout << "IDDOC khong ton tai." << endl;
break;
}
case 3:
{
int yeardoc[50];
cin >> yeardoc[50];
for (int i = 0;; i++){
if (yeardoc[50] == doc.year[i])
write_output(i, "report.scv");
}
break;
}
case 0:
{
menubegin();
break;
}
menudoc();
}
}
我的第二个功能:
int write_output(int i, char* filename){
ios::out;
struct m_doc doc;
// open file for output
ofstream fout(filename);
char * k, *h;
k = strchr(doc.title, ',');
h = strchr(doc.author, ',');
if (k != 0 && h != 0)fout << doc.id[i] << "n" << doc.ISBN[i] << "n" << '"' << doc.title[i] << '"' << "n" << '"' << doc.author[i] << '"' << "n" << doc.year[i] << endl;
if (k != 0) fout << doc.id[i] << "n" << doc.ISBN[i] << "n" << '"' << doc.title[i] << '"' << "n" << doc.author[i] << "n" << doc.year[i] << endl;
if (h != 0)fout << doc.id[i] << "n" << doc.ISBN[i] << "n" << doc.title[i] << "n" << '"' << doc.author[i] << '"' << "n" << doc.year[i] << endl;
// write informations
if (k == 0 && h == 0)fout << doc.id[i] << "n" << doc.ISBN[i] << "n" << doc.title[i] << "n" << doc.author[i] << "n" << doc.year[i] << endl;
// close file
fout.close();
return 0;
}
我问过的任何人都说这是范围问题,但他们都不知道问题所在,因为一切看起来都很好。。。请帮帮我,我们非常感谢您的帮助:)
我猜您对何时使用正向声明以及何时包含结构定义感到困惑。以下是一些指导原则。
转发声明
结构的正向声明的形式为:
struct m_doc doc;
此表单用于解析定义、引用符号doc
的任何指针或引用。通常,它被放在其他结构或函数声明之前的头文件中,以减少#include
文件的数量。
结构定义
您需要在任何代码之前提供结构定义:
- 创建结构的实例
- 或者在提到结构细节之前(成员和方法)
在#include
文件中放置结构
与其在使用的任何地方都键入结构,一种方便的做法是将其放在头文件中,对于C语言结构,通常为".h",对于C++类和结构,通常是".hpp"或".hh"。因此,当源文件中有一个函数引用该结构(或创建该结构的实例)时,请在该函数使用该文件之前将其与定义一起包含。
大多数编译器都会发出错误
"left of ... must have class/struct/union "
当它找不到结构的定义或声明时。
相关文章:
- 如何重构类层次结构以避免菱形问题
- 包含矢量指针的结构的内存释放问题
- 在类中返回结构时出现问题
- 我对数据结构、双向链表有一些问题
- C++模板类中结构的编译器问题
- 我的超类中的模板问题与结构定义
- 修改C++结构的特征成员时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- 在C++中循环访问自定义结构列表的小问题
- 在C++中对结构向量进行排序时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 我的堆栈和库存清单程序的结构有什么问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 我应该如何在C++中使用结构体解决输入失败的问题?
- DNS 查询格式标头结构中的小字节序问题
- C++,类结构问题
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题