vscode文件编译问题undefined reference to... collect2.exe: error: ld returned 1 exit status

昨天学习C++ 时候一直出现错误
在这里插入图片描述
仔细看分别报错
undefined reference to `stack::push

collect2.exe: error: ld returned 1 exit status

我的文件结构如下:
在这里插入图片描述
各文件如下 :
main.cpp:

#include "stack.hpp"

using namespace std;
void fill_stack(stack &stack, istream &is = cin)
{
    string str;
    while (is >> str && !stack.full())
    {
        stack.push(str);
    }
    cout << "read in " << stack.size() << "elements\n"<<endl;
}
int main(){
    stack st;
    string str;
    cout << "s.size() = " << st.size()<<endl;
    fill_stack(st);
    cout << "s.size() = " << st.size()<<endl;
    cout << "s.peek(str) = "<<st.peek(str)<<"["<<str<<"]"<<endl;
    return 0;
}

stack.hpp

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class stack
{
private:
    vector<string> _stack;
public:
        bool push(const string &elem);
        bool pop(string &elem);
        bool peek(string &elem);

        bool empty(){return _stack.empty();};
        bool full() {return _stack.size() == _stack.max_size();};

        int size(){
            return _stack.size();
        }
};

stack.cpp

#include "stack.hpp"

bool stack::pop(string &elem)
{
    if (empty())
    {
        return false;
    }
    elem = _stack.back();
    return true;
}
bool stack::push(const string &elem)
{
    if (full())
    {
        return false;
    }
    _stack.push_back(elem);
    return true;
}
bool stack::peek(string &elem)
{
    if (empty())
    {
        return false;
    }
    elem = _stack.back();
    return true;
}

先看第一个错误,类stack下的push函数未定义,类push方法在stack.cpp中实现,并且在main.cpp中引用了stack.hpp了为什么会说没定义呢?
1、首先检查函数名称以及参数列表是否正确
我这里函数以及参数名称全都正确没有问题,代码检查也没有提示报错

将这几段代码全都注释掉发现能正常运行,这下就奇怪了,同样是在main.cpp中使用stack类,在stack.hpp中的函数能正常使用,而在stack.cpp中定义的却无法使用。
仔细检查了相互间的应用头文件等都是正确的。main.cpp中却没法使用到stack.cpp中的部分

看第二个错误collect2.exe: error: ld returned 1 exit status有可能是编译错误。
再查了很久才发现原来是vscode的锅;
首先 :
调试模式的话需要设置 tasks.json中的 ${file} 改成 “${fileDirname}\\*.cpp”
在这里插入图片描述
改成:
在这里插入图片描述
但是右键运行时候依然报错
因为右键运行程序实际上是使用code runner,所以可能是code runner的锅
在这里插入图片描述
g++ 后同样的修改成为 *.cpp, 如果有c 语言的也可以在上面gcc 后改成 *.c
在这里插入图片描述
改完以后就能正常跑通了。
不得不说vscode对于新手的坑还是挺多的,c++坑也不少,两个凑到一起真是酸爽!

  • 21
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃肉夹馍不要夹馍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值