vscode g++ 找不到 .cpp 定义文件

2023-11-30

我正在尝试使用多个 .cpp 和 .hpp 文件编译 C++ 示例,但 g++ 找不到任何成员函数定义。


主要.cpp:

#include <iostream>
#include "Person.hpp"

int main()
{
    std::cout << "HELL!\n";
    
    Person a{"Jiraya"};
    std::cout << a.getName() << "\n";
    a.setName("Niko");
    a.do_smt();
}

人.hpp:

#pragma once

#include <string>

using std::string;

class Person
{
private:
    string name;

public:
    Person();
    Person(const string &n);
    void do_smt();
    string getName(){return name;}
    void setName(const string& n);

人.cpp:

    #pragma once
    #include <iostream>
    #include "Person.hpp"
    
    Person::Person(const string &n) : name{n}
    {
    }
    
    void Person::setName(const string &n)
    {
        name = n;
    }
    
    void Person::do_smt()
    {
        std::cout << "???";
    }

任务.json:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-iquote${workspaceFolder}/headers"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

终端输出:

> Executing task: C/C++: g++ build active file <

Starting build...
/usr/bin/g++ -fdiagnostics-color=always -g /home/raijin/Documents/Code/C++/sandbox/main.cpp -o /home/raijin/Documents/Code/C++/sandbox/main -iquote/home/raijin/Documents/Code/C++/sandbox/headers
/usr/bin/ld: /tmp/ccN0pJKE.o: in function `main':
/home/raijin/Documents/Code/C++/sandbox/main.cpp:9: undefined reference to `Person::Person(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/raijin/Documents/Code/C++/sandbox/main.cpp:11: undefined reference to `Person::setName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /home/raijin/Documents/Code/C++/sandbox/main.cpp:12: undefined reference to `Person::do_smt()'
collect2: error: ld returned 1 exit status

Build finished with error(s).

Terminal will be reused by tasks, press any key to close it.

这是项目文件夹结构:

folder structure

我确实添加了"-iquote${workspaceFolder}/headers" arg in tasks.json在子目录中找到 .hpp。它似乎不适用于 .cpp 文件。我该怎么办?(即使我搬家Person.cpp to ${workspaceFolder}结果相同的终端输出)


In your tasks.json你正在使用默认的${file}这意味着仅编译活动文件,而不编译文件夹结构中的所有源文件。

VSCode 文档解释了如何针对同一文件夹中的所有源文件的情况修复此问题:https://code.visualstudio.com/docs/cpp/config-linux#_modifying-tasksjson

修复方法是更换${file} with "${workspaceFolder}/*.cpp"

在您的情况下,您有多个包含源文件的文件夹。您可以通过添加以下内容对第二个文件夹应用类似的修复:"${workspaceFolder}/classes/*.cpp"

所以整个tasks.json将是:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${workspaceFolder}/*.cpp",
                "${workspaceFolder}/classes/*.cpp",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-iquote${workspaceFolder}/headers"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vscode g++ 找不到 .cpp 定义文件 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 在可重用单元格中显示下载进度

    我正在尝试在我的集合视图单元格中显示下载进度 我当前使用解析进度块 它具有单元格的实例并更新进度栏 progressBlock percent in self mainQueue addOperation set the downloadP
  • 有没有简单的方法来防止输入回声?

    如何防止输入时出现回声 尝试过 getpass 但没有运气 在 Windows IDLE 上 它不起作用 Python 3 3 2 v3 3 2 d047928ae3f6 May 16 2013 00 03 43 MSC v 1600 32
  • SMT 求解器中约束强化的效率

    解决优化问题的一种方法是使用 SMT 求解器来询问是否存在 坏 解决方案 然后逐步添加更严格的成本约束 直到命题不再可满足 例如 该方法在以下内容中进行了讨论 http www lsi upc edu oliveras espai pape
  • 找出创建满足 m 个条件的长度为 n 的序列 A 的多种方法

    找出创建满足 m 个条件的长度为 n 的序列 A 的多种方法 该序列 A 应仅包含非负数 每个条件由三个整数 i j k 描述 表示 max A i A j k 保证序列的每个索引至少在一种情况下存在 即存在有限数量的此类序列 n 的最大值
  • 在 scrapy 的 start_requests() 中返回项目

    我正在编写一个 scrapy 蜘蛛 它将许多 url 作为输入并将它们分类 作为项目返回 这些 URL 通过我的爬虫程序提供给蜘蛛程序start requests method 有些网址不需要下载就可以分类 所以我想yield直接Item对
  • 将图像绑定到 URL Xamarin 表单 XAML

    我在使用 Xamarin Forms 将图像绑定到 UriImageSource 时遇到问题 我已经实现了 FlowListView 它呈现一个类似网格的文本列表 但与每个产品关联的图像没有出现 还有其他人遇到过这个问题 知道如何解决它吗
  • 将图像添加到 Axlsx 生成的 Excel 文件中。?

    我在用Axlsx用于生成 Excel 文件 我需要将图像添加到 Excel 文件中 我用过这个代码 ws add image image src gt something noSelect gt true noMove gt true do
  • 使用 Paramiko 进行目录传输

    如何使用Paramiko传输完整的目录 我正在尝试使用 sftp put Folder1 Folder2 这给了我这个错误 错误 Errno 21 是一个目录 您可以子类化 paramiko SFTPClient 并向其添加以下方法 imp
  • iOS 应用商店评级(跟踪用户的操作)

    使用下面的代码我可以要求用户在应用程序商店中对应用程序进行评分 if available iOS 10 3 SKStoreReviewController requestReview else Fallback on earlier ver
  • Spring Integration 消息流中的条件重试建议?

    我有一个 http 网关调用 偶尔会返回 503 错误 我想配置重试建议围绕该调用 但我不想对每个错误都执行此操作 而只是 503
  • 使用 shell_exec 从 php 调用 perl 脚本

    我在使用 shell exec 函数从 php 执行 perl 脚本时遇到问题 这是我尝试过的 并且之前已经成功 perl shell exec usr bin perl cbh script clean pl echo perl 这将不起
  • D3.js 带有嵌套 svg 的缩放会破坏 Internet Explorer 中的视口

    我正在使用 d3 js 动态设置嵌套 svg 即嵌套在封闭 svg 内的内部 svg Ad3 behavior zoom 监听外部 svg 上的缩放事件并进行所需的转换 除了 Internet Explorer IE 11 之外 一切正常
  • 保存 DocumentSnapshot 以在 Firestore android 中进行分页

    我正在尝试在android 中实现分页功能 每次活动开始时我想从集合中获取新的 10 条记录 下次当我打开活动时 最后可见 文档快照 必须保存在 SharedPreference 中才能获取新列表 db FirebaseFirestore
  • JFreeChart StackedXYAreaRenderer 导致图表中出现“卷曲”

    在本例中 我使用 JFreeChart 显示随时间变化的两组数据的堆积折线图dogs and cats import java text ParseException import java text SimpleDateFormat im
  • 使用不带模板参数的模板类

    我有一个带有模板类的 Visual Studio 2008 C 项目 该模板类在构造函数中采用模板化值 如下所示 template lt typename A gt struct Foo const A a Foo const A a a
  • 可以使用具有多个选项卡/工作表的 csv 吗?

    我正在调用 Web 服务 并且来自 Web 服务的数据采用 csv 格式 如果我尝试将数据保存在 xls xlsx 中 那么我会在工作簿中得到多个工作表 那么 如何在 C 中使用多个选项卡 工作表将数据保存在 csv 中 我知道具有多个选项
  • 在 Android 中将视频上传到 Facebook

    Problem 我的视频没有上传到 Facebook Question 如何将视频上传到 Facebook Note 我可以从我的画廊上传图片 没有Exceptions被抛出 我认为线路有问题 params putString filena
  • 同源策略和 CORS - 有什么意义?

    我在理解同源策略和 解决 它的不同方法时遇到了一些困难 显然 同源策略是作为一种安全措施而存在的 因此来自服务器 域的脚本无法访问来自另一服务器 域的数据 同样清楚的是 有时 能够打破此规则是有用的 例如 混搭应用程序访问来自不同服务器的信
  • AJAX 返回带有输出的 HTML 代码

    尝试了一些解决方案后this和许多其他问题我无法弄清楚我的代码中的确切问题是什么 我的代码 document ready function botname blur function ajax type POST url tukaiexot
  • vscode g++ 找不到 .cpp 定义文件

    我正在尝试使用多个 cpp 和 hpp 文件编译 C 示例 但 g 找不到任何成员函数定义 主要 cpp include