错误C4430缺少类型说明符 - 假定为int.注意:C++不支持default-int Generator

HeH*_*acz 6 c++ header vector name-lookup visual-studio-2015

我有以下代码的问题:

Generator.h:

#pragma once
class Generator
{
public:
    friend class BagObject; 
    Generator(void);
    ~Generator(void);
    ...
    void generator(int);
private:
    BagObject *object;
    vector<BagObject> data; //Error c4430
};
Run Code Online (Sandbox Code Playgroud)

这是一个错误:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)

还有6个错误,但我相信它们在解决这个问题后应该会消失.

这是cpp文件.我第一次无法粘贴它.Generator.cpp

#include "stdafx.h"
#include "Generator.h"
#include "BagObject.h"
#include <iostream>
#include <vector>
#include <ctime>

using namespace std;


Generator::Generator(void)
{
    srand(time(NULL));
}


Generator::~Generator(void)
{
    data.clear();
}

void Generator::generator(int ld)
{
    for (int i = 0; i<ld; i++)
{
    object = new BagObject(rand(),rand(),i);
    data.push_back(object);
    }
}


int main()
{
    Generator *g = new Generator;
    g->generator(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

aje*_*jeh 10

其他答案是正确的,但很神秘。用简单的英语来说,你的标题不知道BagObject类。您已包含BagObject.h在 中.cpp,但您应该将其包含在 中.h

vector出于同样的原因,它也不知道。

我猜,您印象中必须.cpp使用#include,但.h没有。这是C++初学者常见的误解。标头需要包含所有引用的类声明,因此您需要将包含从 提升.cpp.h.

将两个提到的包含移动到标题中,它将起作用。


Vla*_*cow 9

要么你忘了包括标题

#include <vector>
Run Code Online (Sandbox Code Playgroud)

或忘了写指令

using namespace std;
Run Code Online (Sandbox Code Playgroud)

无论如何,写作会更好

#include <vector>

//...

std::vector<BagObject> data;
^^^^^
Run Code Online (Sandbox Code Playgroud)

您必须<vector>在有引用的所有标头中包含标头std::vector.

  • 看看`#pragma once`语句你不想推荐`using namespace std`,因为这很可能是一个头文件 (2认同)
  • @KeithThompson 问题不在于使用或不使用指令。问题是关于为什么会发生编译器错误。此外,他是初学者,可能通过阅读所有示例都有此指令的书籍来学习语言。因此,当有人询问有关此指令的问题时,您可以提供建议。:) (2认同)