簡體   English   中英

如何在單獨的頭文件的結構中定義char *數組?

[英]How can i define an array of char* in a struct in a separate header file?

我只是想了解結構並將內容分離到不同的文件中。

目前,我有一個Main.cpp文件,如下所示:

#include <iostream>
    #include "StudentAnswerSheet.hpp"
using std::cout;
using std::endl;

int main(){

    StudentAnswerSheet sheet = {
        "Sally",
        {'a', 'b', 'a', 'd', 'c'}
    };

    cout << sheet.studentName << ":" <<endl;
    for(int i = 0; i <5; i++){
    cout << sheet.studentAnswers[i] << " " ;
    }
    return 0;
}

和一個單獨的頭文件,其中包含我的結構StudentAnswerSheet數據類型:

#include <string>
using std::string;

struct StudentAnswerSheet{
    string studentName;
    char studentAnswers[5];
};

理想情況下, 我希望能夠擁有最多5個字符的數組來保存學生答案。 我認為我可能需要從char更改為char *以獲得一定程度的靈活性,但是當我嘗試實現它時,我收到一條錯誤消息“ char [0]的初始化過多”,並且不確定如何更改工作表的初始化。

我也不確定如果我切換到char *數組時跟蹤數組中包含多少元素的最佳方法是什么。如果我用cin輸入學生答案,那么我就可以跟蹤數字最多5個答案,但是如果我只是想像現在這樣測試自己來初始化答案,我不確定是否可以算出最有效的方法來計算StudentAnswers的大小,所以對此的任何建議也將不勝感激。

謝謝你的幫助!

既然似乎允許您使用std::string ,那么為什么不使用std::vector<char>而不是使用char[5]或考慮使用char*來提高靈活性呢? 在您的情況下,您可以簡單地使用std::string ,然后將其中的每個字符解釋為學生答案

另外,由於StudentAnswerSheet不是POD,這意味着除非您使用C ++ 11,否則以下內容將給出編譯錯誤:

//error in C++98, and C++03; ok in C++11
StudentAnswerSheet sheet = {
    "Sally",
    {'a', 'b', 'a', 'd', 'c'}
};

這是我會做的:

struct StudentAnswerSheet
{
    std::string studentName;
    std::string studentAnswers;

    //constructor helps easy-initialization of object!
    StudentAnswerSheet(const std::string & name, const std::string & answers) 
                : studentName(name), studentAnswers(answers) {}
              //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
};            // it is called member-initialization list

然后將其用作:

StudentAnswerSheet sheet("Sally", "abadc");//easy: thanks to the ctor!

std::cout << sheet.studentName << std::endl;
for(size_t i = 0; i < sheet.studentAnswers.size(); ++i)
{
     std::cout << sheet.studentAnswers[i] << " " ;
}

我不認為您需要切換,使用char數組是可以的(或者您可以使用std :: vector)。 使用時

char* something[5];

您只需初始化指針數組。 當你使用

char something[5]; 

您將獲得指向數組的指針-“ 某物

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM