在c++中使用全局函数的struct成员的方法
using method on member of struct from global function in C++
我对c++很陌生,我总是在这里和那里遇到一些小问题。最近的一次似乎是一个结构体的问题。
struct student_record{
student_record(std::string name, int ident, double gpa){
for (int i = 0; i < name.length(); i++){
student_name[i] = name[i];
student_name[i + 1] = NULL;
}
student_ident = ident;
student_gpa = gpa;
}
//constructor to initialize student_record
static const unsigned int MAX_NAME_LENGTH = 21;
char student_name[MAX_NAME_LENGTH];
int student_ident = 1234;
double student_gpa = 4.0;
};
我想用函数"print_student"打印出这个学生的名字
void print_student(const student_record record){
std::cout << "Student name: ";
std::cout << record.student_name.c_str();
std::cout << std::endl;
std::cout << " Student ID: " << record.student_ident << std::endl;
std::cout << " GPA: " << record.student_gpa << std::endl;
}
我得到错误"智能感知:表达式必须有类类型"编译器错误提示".c_str的左边必须有class/struct/union。"record"在函数的第3行用红色下划线标出,并给出了错误。
我迷路了。我尝试使用非常完整的作用域名称和一切,但它一直给出相同的错误。我不确定发生了什么,错误似乎非常……模糊。
c_str
方法用于std::string
对象。您的student_name
是一个字符数组,因此您不需要在末尾使用.c_str()
。
然而,你最好把student_name
改成std::string
,这样你就不用担心所有的字符复制了
问题出在下面的代码。你已经初始化了结构体中的变量:
int student_ident = 1234;
double student_gpa = 4.0;
正确的代码应该是:
int student_ident;
double student_gpa;
同时在打印代码时应该:
std::cout << record.student_name;
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- C 如何推动vector struct的成员
- 在模板类中声明的struct成员失败
- 使用struct作为成员功能的包装器
- 使用struct成员抛出bad_alloc创建地图
- 'struct std::string'没有名为'c_string'的成员
- 使用struct作为私有成员在链接列表类中定义ListNode
- 作为struct成员的Std::unordered_map的地址为0
- 在struct[]中分配char*指针值(结构成员)的最优化方法
- 为结构成员分配的内存是连续的吗?如果struct成员是数组呢?
- 为什么boost::fusion序列中的struct数组成员类型不能正确推导
- 通过struct将参数传递给CreateThread(),并在不影响前面线程的情况下更改后续线程的成员
- 将struct的成员声明为uint32_t时额外的字节
- 'struct std::pair<int, int>'没有名为'serialize'的成员
- 带有位域成员变量的Struct
- 结构成员之前"struct"和缺少"struct"单词有什么区别
- 是否可以有一个std::vector of struct和一个fexible数组成员
- 在c++中使用全局函数的struct成员的方法