简体   繁体   English

Visual Studio 编译器错误:对委托构造函数的调用应是唯一的成员初始化程序

[英]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.

相关问题 每个构造函数成员初始化器列表的 const 数据成员的初始化,错误:没有匹配的 function 用于调用 - Initialization of const data members per constructor member-initializer list, error: no matching function for call 在成员初始化程序中创建临时 object 时销毁它的要点 - The point of destroying a temporary object when it created in a member-initializer 委托构造函数:委托构造函数的初始化程序必须单独出现 - Delegating constructors: an initializer for a delegating constructor must appear alone Visual Studio编译器错误 - Visual Studio Compiler Error 使用成员初始化器列表进行初始化时如何修复 [-Wreorder] 和 [-Wuninitialized] 冲突? - How to fix of [-Wreorder] & [-Wuninitialized] warrings when initializing using member-initializer list? 委托构造函数中const成员的正确用法是什么? - What is the correct usage of const member in delegating constructor? 如何在成员初始化器列表中调用引用成员的构造函数? - How to call the constructor of reference members in the member initializer list? 这是Visual Studio 2010中的编译器错误吗? - Is this a compiler error in Visual Studio 2010? 无法在委托构造函数中从初始值设定项列表初始化向量 - Unable to initialize vector from initializer list in delegating constructor 必须在构造函数base / member初始化程序中初始化带错误的引用变量 - Reference variable with error, must be initialized in constructor base/member initializer
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM