[英]Visual Studio compiler error: a call to a delegating constructor shall be the only member-initializer
I have this program(below) that keeps giving me a few compiler errors in Visual Studios.我有这个程序(如下),它在 Visual Studios 中不断给我一些编译器错误。 But when I run it with GCC I do not get compile errors.
但是当我用 GCC 运行它时,我没有得到编译错误。 I am really trying to understand how to debug in VS and am having trouble since the compiler errors all point to the last line of the code.
我真的想了解如何在 VS 中进行调试并且遇到了麻烦,因为编译器错误都指向代码的最后一行。 Can anyone help me figure out what the errors mean and how to fix them?
谁能帮我弄清楚错误的含义以及如何解决它们? I also have a pic of the errors that VS gives me:
我还有一张 VS 给我的错误图片:
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
using namespace std;
struct Course
{
string Course;
int Credit = 0;
int Score = 0;
int Grade = 0;
};
struct Student
{
int ID = 0;
string Name = "";
// Course arrCourse[maxCourseAmt];
vector <Course>Courses;
};
int isInStudVector(vector<Student>vect, int target)
{
int i = 0;
while (i <= vect.size())
{
if (vect[i].ID == target)
return i;
i++;
}
return -1;
}
int main()
{
fstream inputFile;
string fileName = "StudentRecords.txt";
string token;
//Student arrStu[9];
vector<Student>Students;
inputFile.open(fileName, ios::in);
if (inputFile.is_open())
{
int index = 0;
int ID;
string Name;
string CourseName;
int Credit;
int Score;
while (!inputFile.eof())
{
inputFile >> ID >> Name >> CourseName >> Credit >> Score;
int ii = isInStudVector(Students, ID);
if (ii == -1) // The student record does not exist
{
Students.push_back(Student());
Students[index].ID = ID;
Students[index].Name = Name;
Students[index].Courses.push_back(Course());
Students[index].Courses[0].Course = CourseName;
Students[index].Courses[0].Credit = Credit;
Students[index].Courses[0].Score = Score;
index++;
}
else /// The student exists
{
/// Add course and score to the existing student record
}
}
inputFile.close();
}
else
cout << "File cannot be opened.";
return 0;
}
Rebuild started...
1>------ Rebuild All started: Project: hw1, Configuration: Debug Win32 ------
1>hw1.cpp
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(28,14): warning C4018: '<=': signed/unsigned mismatch
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): error C3511: 'Course': a call to a delegating constructor shall be the only member-initializer
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : This diagnostic occurred in the compiler generated function 'Course::Course(Course &&)'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): error C2664: 'Course::Course(const Course &)': cannot convert argument 1 from 'std::string' to 'const Course &'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : Reason: cannot convert from 'std::string' to 'const Course'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(13,1): message : see declaration of 'Course::Course'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : This diagnostic occurred in the compiler generated function 'Course::Course(Course &&)'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): error C2437: 'Credit': has already been initialized
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : This diagnostic occurred in the compiler generated function 'Course::Course(Course &&)'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): error C2437: 'Score': has already been initialized
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : This diagnostic occurred in the compiler generated function 'Course::Course(Course &&)'
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): error C2437: 'Grade': has already been initialized
1>C:\Users\Rob\source\repos\hw1\hw1\hw1.cpp(105,1): message : This diagnostic occurred in the compiler generated function 'Course::Course(Course &&)'
1>Done building project "hw1.vcxproj" -- FAILED.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
VS does not like the member string Course
in the struct Course
, because "Course" is the implicit name of the constructor. VS 不喜欢
struct Course
中的成员string Course
,因为“Course”是构造函数的隐含名称。 Rename either the member or the struct name.重命名成员或结构名称。
I suspect you hit a compiler bug.我怀疑您遇到了编译器错误。 Both GCC and Clang compiles your code correctly, but not MSVC .
GCC 和 Clang 都能正确编译您的代码,但不能正确编译 MSVC 。
However, the fix is simple.但是,修复很简单。 It seem MSVC don't like members that has the same name as the class.
似乎 MSVC 不喜欢与 class 同名的成员。 Simply changing
Course
to Name
will do the trick:只需将
Course
更改为Name
即可:
struct Course
{
string Name;
int Credit = 0;
int Score = 0;
int Grade = 0;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.