.BEGIN的左侧必须具有类/结构/联合
Left of .begin must have class/struct/union
我绝对是C 的新手,并且由于大学的教授正在教我C ATM,但我只是自己学习C (实际上是在尝试混合C的速度和公用事业的速度C )。这有点困难...这是我无法确定的事情。
以下代码是更大程序的一部分,但是我决定写这个小部分,只是为了向您展示错误,它们的发生方式(这些都是所有的,但更多。.因为该程序更大)
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <stdio.h>
#include <numeric>
#include <string>
typedef struct stud
{
std::string name;
unsigned int fak_no;
struct b_date
{
int M;
int D;
unsigned Y;
};
std::string adm_gr;
std::vector <float> grades;
float sum_div_2;
};
void imp_data ( std::vector <stud> imp_vec ( int x ) )
{
printf ( " Import data for each person: n " );
for ( std::vector <stud>::iterator it = imp_vec.begin(); it != imp_vec.end(); it++
{
std::cout << " for person " << ( it - imp_vec.begin() ) +1 << ": " << " n";
std::cout << " names: ";
std::getline (std::cin, imp_vec.at (*it).name);
}
}
void main ()
{
int size;
printf ( " Number of persons: " );
std::cin >> size;
std::vector <stud> lads (size);
imp_data ( lads (size) );
system ( " pause " );
}
我通常遇到的错误是:左...实际上任何东西 -> .at().begin().end()。 - 但是如何?我认为矢量至少是一个结合,而不是说这个构成型结构。第二.. std :: getline期望3个参数...我提供了2 ...大声笑?第三,在imp_data();
上,"术语不评估为1个参数的函数";花了太多时间试图弄清楚这一点,但仍然没有成功。如果有人能提供帮助,我将非常感激,这将确定我的学习。
std::vector <stud> imp_vec ( int x )
不是对象。std::vector <stud> imp_vec
是。但这确实应该是参考对对象的 std::vector <stud> & imp_vec
您通过代码都有很多类似的错别字。
在学习C 编码时,您还需要需要做的事情:先编写小件代码并编译它们。然后,您可以轻松地将语法错误和错别字固定在较小的代码上,而不是一次。
一次。因此,在写这篇文章时,您应该从以下内容开始。
void imp_data ( std::vector <stud> imp_vec ( int x ) )
{
}
void main ()
{
int size = 20;
std::vector <stud> lads (size);
imp_data ( lads (size) );
}
然后修复其中的所有错误。然后添加更多代码并重复。
您的代码中有几个改进的位置:
-
无需混合
printf()
和I/O流:std::cout
对于将字符串输出到控制台都可以。 -
在C
struct Something
中很好,不需要typedef struct Something
。 -
使用
++it
(预先提示)来增加迭代器(而不是it++
;it++
是一个过早的悲观:)。 -
学会正确格式化代码,尤其是凹痕。
-
不包括不必要的标题。
-
请注意,在您的
imp_data()
函数中,imp_vec
向量由该函数填充,并且结果应传递回呼叫者,因此您应通过(non-const)参考将其传递给呼叫者:void imp_data(std::vector<stud>& imp_vec)
。 -
如果使用现代C (C 11/14),则可以使用
auto
(或基于范围的for
)进行循环迭代。至少使用auto
,您不必拼写长的迭代类型名称。
请参阅您的代码的潜在改进:
#include <iostream>
#include <string>
#include <vector>
struct stud {
std::string name;
// ... other fields ...
};
void imp_data(std::vector<stud>& imp_vec) {
std::cout << "Import data for each person:n";
for (auto it = imp_vec.begin(); it != imp_vec.end(); ++it) {
std::cout << "for person " << ((it - imp_vec.begin()) + 1) << ": " << " n";
std::cout << "name: ";
// std::cin >> it->name;
std::getline(std::cin, it->name);
}
}
int main() {
std::cout << "Number of persons: ";
int size;
std::cin >> size;
std::vector<stud> lads(size);
imp_data(lads);
// Output names
std::cout << "nNames:n";
for (const auto & x : lads) {
std::cout << x.name << std::endl;
}
}
享受您的学习过程。
- 如何将结构/联合数组的成员传递到函数中
- 错误 C2228 左侧'.setDay'必须具有类/结构/联合
- 在C++中为结构(联合)创建构造函数
- '.expression'左边必须有类/结构/联合
- C++错误 C2227:'->looseHealth'左侧必须指向类/结构/联合/泛型类型
- C 结构/联合到C#结构
- C++ 使用比较 - '.compare'左侧必须具有类/结构/联合
- 表达式必须具有类类型,'.x'左侧必须具有类/结构/联合
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- .BEGIN的左侧必须具有类/结构/联合
- 我的测试用例错误类/结构/联合
- C++ 异常情况下的错误 C2228(".val"的左侧必须具有类/结构/联合)
- 错误 C2228:".x"的左侧必须具有类/结构/联合
- 错误:C2228:左侧必须具有类/结构/联合
- 错误 C2228:".printStats"的左侧必须具有类/结构/联合
- '.getDrinkPrice'左边必须有类/结构/联合
- 通过反射在XML中的C/C++头文件中定义的可视化嵌套结构/联合
- 错误 C228:"必须多次具有类/结构/联合"的左侧
- 正在分析XML中C/C++头文件中定义的嵌套结构/联合
- 错误 C2228:'.Alloc'左侧必须具有类/结构/联合