我现在正在学习C ++,但出现了一些奇怪的错误。
代码如下:
#include <iostream>
#include <array>
using std::cout;
using std::endl;
using std::ostream;
using std::array;
template <typename T, size_t dim>
ostream& operator<<(ostream& os, const array<T,dim>& a) {
os << "[ ";
for (auto n : a)
os << n << " ";
os << "]";
return os;
}
int main()
{
cout << endl << "--- " << __FILE__ << " ---" << endl << endl;
array<int,3> a1 { 2,3,5 }; // (A)
array<int,0> a2 { }; // (B)
array<int,2> a3 { 1 }; // (C)
// array<int> x1 { 1, 2, 3 }; // (D)
// array<int,3> x2 { 1,2,3,4 };
array<int,3> a4 = { 1,2,3 }; // (E)
array<int,3> a5 { { 4,5,6 } }; // (F)
cout << "01| a1=" << a1 << endl;
cout << "02| a2=" << a2 << endl;
cout << "03| a3=" << a3 << endl;
cout << "04| a4=" << a4 << endl;
cout << "05| a5=" << a5 << endl;
cout << endl << "--- " << __FILE__ << " ---" << endl << endl;
return 0;
}
我的IDE(Visual Studio代码)向我显示了该错误,尽管该代码正在编译并且可以正常工作。
这是我们教授提供的makefile。
# compiler settings
CXX = g++-7
# CXX = clang++
CXXFLAGS = -ansi -pedantic -Wall -Wextra -Wconversion -pthread -std=c++17
LDFLAGS = -lm
# collect files
CXXEXAMPLES = $(shell find . -name '*.cpp' -print -type f)
CXXTARGETS = $(foreach file, $(CXXEXAMPLES), ./out/$(file:.cpp=.out))
# build them all
all: $(CXXTARGETS)
out/%.out: %.cpp
$(CXX) $(CXXFLAGS) $< $(LDFLAGS) -o $@
clean:
rm out/*
我使用Ubuntu 16.04,并认为这可能是编译器问题,所以我将“ CXX”更改为“ CXX = g ++-7”,因为建议使用g ++版本7,但没有帮助。 键入“ g ++ -v”时,表明我的gcc版本是5.5.0,但是键入“ apt list -installed”则表明已安装g ++-7。
我没有在互联网上找到任何解决方案,因为大多数类似的问题经常围绕缺少附件的问题解决。
VS Code也无法识别某些类型的变量定义,例如 “ int n {1}” 它还抱怨在(A)至(E)行上“使用未声明的标识符”
我假设问题出在VS Code编译器中,使用了不同/旧的语法识别。但是我不知道该如何改变。