【问题标题】:Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Generator错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int Generator
【发布时间】:2017-03-28 10:49:39
【问题描述】:

我对以下代码有疑问:

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
};

这是一个错误:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

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

这是 cpp 文件。我第一次贴不上去。 生成器.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;
}

【问题讨论】:

  • 我只是猜测,但您没有忘记std::vector 或包含 BagObject 标头吗?

标签: c++ vector visual-studio-2015 header name-lookup


【解决方案1】:

要么你忘了包含标题

#include <vector>

或者忘记写指令

using namespace std;

无论如何最好写

#include <vector>

//...

std::vector<BagObject> data;
^^^^^

您必须在所有引用 std::vector 的标头中包含标头 &lt;vector&gt;

【讨论】:

  • #pragma once 声明你不想推荐using namespace std 因为这很可能是一个头文件
  • @AdrianLis 你在哪里看到我推荐使用它?
  • @AdrianLis 我看到他使用了不合格的名称,所以我断定他已经使用了该指令。
  • @KeithThompson 问题不在于使用或不使用指令。问题是关于为什么会发生编译器错误。而且他是初学者,可能通过阅读所有示例都有此指令的书来学习语言。所以当有人问这个指令的问题时,你可以给出你的建议。:)
  • @HeHacz 正如我在回答中所写的,您必须包含像#include 这样的标头向量。类向量在此标头中声明。
【解决方案2】:

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

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

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

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

【讨论】:

  • 先生,衷心感谢您,您解决了虚幻引擎社区中没有人能够体面地解决的问题。有人说“您不能转发声明枚举” ,其他人“你不能使用那个宏”,我能够做到这两个只是包括在.h文件中声明枚举的文件(在虚幻中几乎所有东西都包含在.cpp中)
【解决方案3】:

vector 不能用不完整的类型实例化。为了在标头中有vector&lt;BagObject&gt; data;,标头还必须有#include "BagObject.h"

(这是对弗拉德回答中建议的更改的补充)

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多