【问题标题】:Trouble passing an array of structs传递结构数组时遇到问题
【发布时间】:2011-07-28 10:32:04
【问题描述】:

我终其一生都无法弄清楚如何在整个程序中传递这个结构数组。有人可以帮忙吗?现在我在 main 中收到一个错误,上面写着:')' 标记之前的预期主表达式。

标题:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

#include <iostream>
#include <fstream>
#include <string>
#include  <cstring>
#include <iomanip>
#include <cctype>

using namespace std;

struct addressType
{
    char streetName[36];
    char cityName[21];
    char state[3];
    char zipcode[6];
    char phoneNumber[15];
};

struct contactType
{
    char contactName[31];
    char birthday[11];
    addressType addressInfo;
    string typeOfentry;
};

typedef struct contactType contactInfo;

void extern readFile(ifstream&, int&, struct contactType *arrayOfStructs);
void extern sortAlphabetically();
void extern userInput(char&);
void extern output(char&);



#endif // HEADER_H_INCLUDED

主要:

#include "header.h"

int main()
{
    ifstream inFile;
    char response;
    int listLength;
    struct arrayOfStructs;

    inFile.open("AddressBook.txt");

    if (!inFile)
    {
        cout << "Cannot open the input file."
             << endl;
            return 1;
    }

    readFile(inFile, listLength, arrayOfStructs);
    sortAlphabetically();
    userInput(response);
    output(response);

    return 0;
}

读取文件:

#include "header.h"

void readFile(ifstream& inFile, int& listLength, struct arrayOfStructs[])
{
    contactInfo arrayOfStructs[listLength];
    char discard;

    inFile >> listLength;
    inFile.get(discard);

    for (int i = 0; i < listLength; i++)
    {
        inFile.get(arrayOfStructs[i].contactName, 30);
        inFile.get(discard);
        inFile.get(arrayOfStructs[i].birthday, 11);
        inFile.get(discard);
        inFile.get(arrayOfStructs[i].addressInfo.streetName, 36);
        inFile.get(discard);
        inFile.get(arrayOfStructs[i].addressInfo.cityName, 21);
        inFile.get(discard);
        inFile.get(arrayOfStructs[i].addressInfo.state, 3);
        inFile.get(discard);
        inFile.get(arrayOfStructs[i].addressInfo.zipcode, 6);
        inFile.get(discard);
        inFile.get(arrayOfStructs[i].addressInfo.phoneNumber, 15);
        inFile.get(discard);
        inFile >> arrayOfStructs[i].typeOfentry;
        inFile.get(discard);
    }
}

【问题讨论】:

    标签: c++ arrays struct


    【解决方案1】:

    数组(结构或其他东西)受到许多特殊规则的影响,例如在最轻微的刺激下“衰减”为指针(从而忘记它的长度)。

    如果你需要200个contactType的集合,最简单的方法是使用std::vector

    std::vector<contactType>   Contacts(200);
    

    然后您可以将对此的引用传递给需要联系人的函数。

    【讨论】:

    • 他也可以使用std::array/boost::array
    【解决方案2】:

    你在哪里:

    struct arrayOfStructs;
    

    你需要:

    struct contactType arrayOfStructs[200]; // assuming you want 200 structs 
    

    【讨论】:

    • 错误:使用 typedef-name contactInfo' after struct'|在函数 `void readFile(std::ifstream&, int&, contactInfo*)':|错误:'contactInfo arrayOfStructs[((unsigned int)((int)listLength))]' 的声明遮蔽了参数|
    • @Matt - 你有一个参数和一个同名的局部变量。编译器警告您,您将无法访问该参数(因为它的名称隐藏在另一个参数后面)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多