C++ VS 2019 错误报告及解决办法

基于2020年10月学期 Object-Oriented Programming 课程 MerkelBot 自动货币交易机的项目,以下列出我遇到过的错误报告及处理方法。

Visual Studio 2019

空屏

等一会儿……项目太大,打开中……

LNK2019 无法解析的外部符号

Solution: 查找 class 中的 static object 是否已在.cpp file中初始化。Define static vectors in .cpp file outside of any of the member functions, bugs disappear.

非静态成员引用必须与特定对象相对

Solution: Make those member functions to be static.
或者建这个 class 的 instantiation 然后使用这个类的实例,而非使用这个类。
注意,使用类时用:: 使用类的实例时用.
MerkelMain::wallet
merkelMain.wallet

C2597 对非静态成员xxx的非法引用

Solution: pass an instance of the class.

Debug assertion failed! Vector subscript out of range

Solution: 检查vector是不是有使用还没存在的那个下标元素的情况,比如输出V[1]但是还没存这个值。
检查是否正确使用了 vector 中的 functions,比如是不是把 vector 当成了array 使用?是不是要使用push_back, erase等等functions?

Debug error! abort() has been called

在自己新写的那段代码前后都加 std::cout 用文字说明,并打出每个变量的当前值,就可以根据运行时卡住的位置定位出错的位置行。

vector out of range

检查 vector 的赋值情况
double endMinusOne = expSmoothInstan.vecStoreActual.at(expSmoothInstan.vecStoreActual.back()-1);
查这个 -1 的位置是不是还是空的?是不是-2?
其实还是错的,因为应该写
vec.at(vec.size()-2)
at 后面括号里应该跟一个数,因为它代表一个位置。如果用back岂不是用了最后存的那个数减一当成访问位置了?

Debug Assersion Failed! back() called on empty vector

看看如果写的是 back()-10,那这个位置有元素吗?是不是总共才存了9个数?那应该是 back()-9 才对。
再查是不是应该写 vec.at(vec.size()-10)

如何得到map中第二列存的东西

正确写法:
double money = merkelMain.wallet.currencies.at(“DOGE”);
这里,Wallet wallet 这个object是MerkelMain 这个class里的一个成员,而merkelMain是MerkelMain 这个class的instantiation. 在Wallet这个class中有一个数据类型为map的成员叫 currencies,我要得到其中key为 ”DOGE” 的第二列那个值。说白了,我要知道我钱包里 DOGE 这个币种有多少钱。

C2676: 二进制不定义该运算符或到预定义运算符可接收的类型的转换

这个怎么解决的来着……

C3646: 未知重写说明符

定位到 .h 文件中 class 里的一个成员。
原因是两个 .h 文件相互 #include,即你引用我,我也引用你。解决办法:在一个 .h 文件中删掉 #include 然后在其 .cpp 文件中#include它。

你可能感兴趣的:(笔记)