【发布时间】:2020-07-28 15:18:32
【问题描述】:
我已经尝试找出这个错误大约一个小时了。这可能是我忽略的一个非常明显的语法问题。这是我的第一个 C++ 项目,我对语言的结构没有很好的掌握。
这是我的头文件:
#pragma once
#include <vector>
class BoardState
{
private:
std::vector<int> numbers;
int SIZE;
public:
BoardState();
std::vector<int> getState();
bool isZero();
};
下面是实现,在一个单独的文件中:
#include "BoardState.h"
BoardState::BoardState(){
SIZE = 4;
numbers.push_back(1);
numbers.push_back(3);
numbers.push_back(5);
numbers.push_back(7);
}
std::vector<int> BoardState::getState() { return numbers; }
bool BoardState::isZero() {
for (int i = 0; i < numbers.size(); i++) {
if (numbers[i] != 0) { return false; }
}
return true;
}
这段代码真的很简单,所以我不知道是什么问题导致了错误。但是,在每个方法调用中,push_back 和 size,我都收到错误,说 class "std::vector
我的背景是 Java,所以我的第一个想法是我无法调用这些方法,因为 numbers 没有初始化。但是,我在头文件中初始化 numbers 的任何尝试都会导致错误。我试过std::vector<int> numbers = { 1,3,5,7 };,我试过std::vector<int> numbers(4,0);,我什至尝试过创建一个数组并从中构造向量。所有这些尝试不仅导致错误,而且也没有修复方法调用。
我错过了什么?我是否需要初始化向量,或者我在头文件中的内容是否足够?任何建议在这里都会有所帮助,因为我在网上找不到任何关于类似错误的信息。我什至从 StackOverflow 中复制粘贴了有关类似问题的答案的代码,这也会产生错误。
编辑:我在保留错误的同时尽可能地减少了代码:
#include <vector>
class BoardState
{
std::vector<int> numbers;
BoardState() { numbers.push_back(1); }
int getSize() {
int i = numbers.size();
return i;
}
};
在numbers.push_back(1); 行上,我的编译器在标记“push_back”下划线,并突出显示它:
类“std::vector
在int i = numbers.size();这一行,标记“大小”带下划线,错误为:
类“std::vector
我仍然不知道发生了什么。
编辑2:将方法调用放入构造函数和函数中。这改变了与 push_back() 相关的错误消息。
编辑 3:我发现了一些非常令人不安的事情。此代码在不同的编译器中运行良好。我从编辑 1 中复制粘贴了确切的代码,它运行没有问题。我认为问题一定出在 Visual Studio 而不是实际代码上。谢谢大家帮我解决这个问题。我想我只是要切换到不同的编译器并希望最好。
编辑 4:只是为了向 pm100 证明我的代码与我所说的完全一样,这是来自 Visual Studio 的屏幕截图。 Here it is.
除了主要方法,这是我在这个问题中提出的逐个字符。不过,我猜想为什么这不起作用。我修改了我的 Visual Studio 2019 版本,以便为大学课程运行 .386 汇编代码。虽然我认为我按照指南执行此操作而不影响其他任何内容,但它可能搞砸了 C++ 编译器的某些部分。
【问题讨论】:
-
您能否发布相关代码的完整错误消息?
-
我无法重现该问题:godbolt.org/z/1nPebq您使用的是什么系统,正如 Shaggi 所问,您能发布确切的错误消息吗?
-
复制,我不能。 minimal reproducible example你必须提供。
-
第一个错误是什么?
-
Visual Studio 可能有一些问题,但这段代码肯定不会。你是哪个版本的?
标签: c++ visual-studio vector