c++ - 预编译头文件中的错误 C2512?

标签 c++ vector structure visual-studio-2013 precompiled-headers

我遇到了一个非常奇怪的问题。当我尝试运行下面的程序时,出现一条错误消息:“错误 C2512:‘记录’:没有合适的默认构造函数可用”。当我双击它时,它会将我引导至名为“xmemory0”的预编译只读头文件。他们希望我更改只读文件吗?这是它指示我访问的文件中的代码段:

void construct(_Ty *_Ptr)
{   // default construct object at _Ptr 
    ::new ((void *)_Ptr) _Ty();  // directs me to this line
}

程序如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

const int NG = 4; // number of scores

struct Record
{
    string name;  // student name
    int scores[NG];
    double average;

    // Calculate the average
    // when the scores are known
    Record(int s[], double a)
    {
        double sum = 0;

        for(int count = 0; count != NG; count++)
        {
            scores[count] = s[count];
            sum += scores[count];
        }

        average = a;
        average = sum / NG;
    }
};

int main()
{
    // Names of the class
    string names[] = {"Amy Adams", "Bob Barr", "Carla Carr",
                      "Dan Dobbs", "Elena Evans"};

    // exam scores according to each student
    int exams[][NG]= { {98, 87, 93, 88},
                       {78, 86, 82, 91},
                       {66, 71, 85, 94},
                       {72, 63, 77, 69},
                       {91, 83, 76, 60}};

    vector<Record> records(5);


    return 0;
}

最佳答案

没有记录的默认构造函数,并且vector<Record> records(5)需要一个。众所周知,Visual Studio 的模板错误消息毫无用处。如果您转到“输出”选项卡而不是“错误”选项卡,您会看到一连串的错误消息,第一个是您找到的错误消息,最后一个应该指向您的 vector。行。

如果您单击错误消息,然后切换到“输出”选项卡,向下滚动冗长的错误消息,直到找到对您自己的代码的引用,然后找出修复方法。

这是完整的错误信息。我来源中的第 44 行是您的 vector行:

D:\dev12\VC\INCLUDE\xmemory0(588) : error C2512: 'Record' : no appropriate default constructor available
        D:\dev12\VC\INCLUDE\xmemory0(587) : while compiling class template member function 'void std::allocator<_Ty>::c
nstruct(_Ty *)'
        with
        [
            _Ty=Record
        ]
        D:\dev12\VC\INCLUDE\xmemory0(723) : see reference to function template instantiation 'void std::allocator<_Ty>:
construct(_Ty *)' being compiled
        with
        [
            _Ty=Record
        ]
        D:\dev12\VC\INCLUDE\type_traits(572) : see reference to class template instantiation 'std::allocator<_Ty>' bein
 compiled
        with
        [
            _Ty=Record
        ]
        D:\dev12\VC\INCLUDE\vector(650) : see reference to class template instantiation 'std::is_empty<_Alloc>' being c
mpiled
        with
        [
            _Alloc=std::allocator<Record>
        ]
        z.cpp(44) : see reference to class template instantiation 'std::vector<Record,std::allocator<_Ty>>' being compi
ed
        with
        [
            _Ty=Record
        ]

关于c++ - 预编译头文件中的错误 C2512?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851286/

相关文章:

c++ - 是否可以分配两个不同类型的结构?

c++ - 我无法运行我的 "a.exe",只要我有一个类构造函数和析构函数,c++ 就用 mingw 制作?

c++ 11使用静态断言模板参数的行为

java - 当 Vector 位于包含类中时,使用 Vector 的 addAll( ) 函数时出现问题

vector - openGL 中的一颗行星 : vector data or texture mapping?

c++ - std::vector<>::emplace_back() 中的异常安全吗?

python - 为什么 "raise"和 "del"不是 Python 中的函数?

c - 基本主菜单代码不起作用

c++ - 在 C 程序中添加 C++ 代码 - 预期 ‘,’ 或 ‘...’ 之前的 ‘this’

C++ 递归指针函数调用