结构c++中的作用域
Scope in structs c++
我正在使用C++制作一个用卡片填充Deck结构的程序。这是甲板的定义:
struct Deck{
char suit;
int value;
};
我的问题是,使用我的结构fillDeck
的函数无法访问该结构的内容。也许我做得完全错了,但我有以下几点:
void fillDeck(Deck *deck){
for (int num = 2; num <= 14; num++){
for(int count = 0; count < 4; count++){
if(count == 0){
suit = "clubs";
}
if(count == 1){
suit = "hearts";
}
if(count == 2){
suit = "diamonds";
}
if(count == 3){
suit = "spades";
}
}
}
}
我的主要功能如下。
int main (int argc, char *argv[]){
Deck deck;
fillDeck(&deck);
}
如果将结构成员suit
更改为字符串,则主函数将工作。
#include <string>
struct Deck
{
std::string suit;
int value;
};
然后在fillDeck
中访问它,如下所示:
...
deck->suit = "clubs";
...
像这样声明您的结构
struct Deck{
char* suit;
int value;
};
然后你可以这样访问它:
deck->suit
如果需要保留套装的全名,使用std::string是一个不错的选择。如果你必须使用字符的西装,那么你可以使用缩写如下:
void fillDeck(Deck *deck){
for (int num = 2; num <= 14; num++){
for(int count = 0; count < 4; count++){
if(count == 0){
deck->suit = `C`;
}
if(count == 1){
deck->suit = `H`;
}
if(count == 2){
deck->suit = `D`;
}
if(count == 3){
deck->suit = `S`;
}
}
}
}
你可以相应地调整你的其余部分。
此外,您可能希望尝试switch case
语句,而不是连续的if语句,在这种情况下可能会更好。
在查看您传递给main()内部的fillDeck(Deck*Deck)函数的内容时,我想说您可能传递了错误的Deck参数,因为现在您正在将地址传递给尚未初始化的Deck数据结构。。。
我认为你应该采取的策略是在你的主函数中定义一个Deck类型的指针,也许是像Deck*ptrDeck这样的指针,然后这个指针应该指向一个Data类型的新结构。我现在真的不太理解你的问题集,但我也认为,也许这个指针真的应该指向一个数组类型的牌组,然后它会用相应的值来容纳每一套衣服。您很可能需要使用for循环来填充数据类型的数组,以保存每个套装和值。这可以/应该在它自己的功能中完成。
然后,您可以创建另一个函数来打印Deck结构的每个初始化实例。
你的for循环可能会有类似ptrDeck[i].suit="不管是什么"。。。但话说回来,你的西装被声明为char类型,所以在我看来,也许你必须仔细考虑一下。。。
我不是专家,我花了一段时间才理解指针以及如何访问结构内部的数据。但我认识到你遇到的困难,因为它与我遇到的类似,这只是我在不明确为你写代码的情况下解决它的过程。。。
如果我对这件事的理解有偏差,请有人告诉我,得到一些反馈会很酷。。。
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 如何在C++中访问作用域的变量输出?
- 重载时未在 C++ 的作用域错误中声明
- 作用域枚举和标准::get