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

罗伯特·弗格

我有这个程序(下面),在Visual Studios中不断给我一些编译器错误。但是,当我使用GCC运行它时,不会出现编译错误。我真的想了解如何在VS中进行调试,但由于编译器错误均指向代码的最后一行,因此遇到了麻烦。谁能帮助我弄清楚错误的含义以及如何解决这些错误?我还有一张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 ==========
纪尧姆·拉西科特(Guillaume Racicot)

我怀疑您遇到了编译器错误。GCC和Clang都可以正确编译您的代码,但MSVC不能

但是,修复很简单。MSVC似乎不喜欢与该类同名的成员。只需更改Course为即可Name完成操作:

struct Course
{
   string Name;
   int Credit = 0;
   int Score = 0;
   int Grade = 0;
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Visual Studio生成“错误:未初始化的本地变量'x'”,而在线编译器不生成-为什么?

是否应该在Visual Studio C#编译器中将此列表初始化器行为报告为错误?

Visual Studio 2017允许在构造函数中使用自身初始化引用成员。C ++真的合法吗?

初始化C数组的参考成员不要在Visual Studio 2015上编译

如何在Visual Studio Code中初始化PHP构造函数字段

constexpr构造函数必须初始化直接基类(Visual Studio)

Visual Studio 可能是错误的编译器错误

使用Visual Studio编译器分析内联的C ++函数

编译器错误CS1061 Visual Studio

这是Visual Studio 2010编译器中的错误吗?

Visual Studio 编译器错误(不能使用逗号)

如何指示MS Visual C ++编译器使用未初始化的__m512i寄存器

程序包管理初始化失败:打开Visual Studio 2017时访问被拒绝错误

Visual Studio程序包安装错误:“无法初始化PowerShell主机。”

编译器错误,因为构造函数必须显式初始化成员

什么是 ?和@符号表明此编译器错误?-Visual Studio 2013编译器

“没有匹配的初始化构造函数” Rad Studio 10 Clang编译器

使用参数化构造函数初始化类成员-编译器认为我正在声明一个函数?

未初始化的成员未被编译器捕获。这是一个错误吗?

Visual Studio 2013和2015中的C ++编译器错误C2280“试图引用已删除的函数”

哪些编译器选项用于在Visual Studio中编译C ++ STL类/函数?

使用g ++编译器在Visual Studio中编译C ++程序会在最后生成%

如果未初始化类成员,Visual Studio C ++选项将发出警告

Visual Studio 2013因非静态数据成员初始化而崩溃

代码在Visual Studio中运行,但是在同一系统中的iis上托管时编译器错误

当 Visual Studio 运行良好时,向量迭代器上的 LInux g++ 编译器错误

在C ++程序中使用libcurl会导致Visual C ++编译器发出错误

Visual Studio-升级后的“未知编译器版本”

在Visual Studio中配置编译器优化选项