RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-272673

Rivand's questions

Martin Hope
Rivand
Asked: 2023-04-06 04:50:26 +0000 UTC

是否可以将一对和一个元组解压到已经创建的变量中

  • 5

有一个函数返回一对或一个元组。它的调用结果必须保存在先前创建的变量中。这可以在不创建中间对象的情况下完成吗?

// Функция возвращает пару. 
std::pair<int, int> Foo() { return { 1, 2 }; }

...

// Распаковка пары в новые переменные.
auto [one, two] = Foo();
member_one_ = one; // Затем записываем результат в уже существующие переменные. 
member_two_ = two;

在此示例中,您必须创建不必要的变量一和二,它们并不是真正需要的。相反,我希望看到类似的东西。

// Записываем возвращаемые значения сразу в необходимые переменные. 
[ member_one, member_two ] = Foo();
c++
  • 1 个回答
  • 37 Views
Martin Hope
Rivand
Asked: 2022-04-24 22:30:50 +0000 UTC

如何快速查看POSIX函数的返回值,并在出错时抛出异常

  • 0

有一个 C++ 代码,其中积极使用返回错误代码的 POSIX 调用。如果这样的调用返回错误,那么我会读取 errno 并抛出适当的异常throw std::system_error( errno, std::system_category(), "Сообщение об ошибе" );。对于每个这样的调用,我们都必须保存值,写 if,写 throw,之后即使是最简单的逻辑代码也会变得一团糟。为了解决这个问题,我编写了一个小包装器来检查返回值并在发生某些事情时抛出:

   inline int PosixResultChecker( int ret_value, const std::string_view error_message ) {
      if ( ret_value < 0 ) [[unlikely]] {
         throw std::system_error( errno, std::system_category(), error_message.data() );
      } else {
         return ret_value;
      }
   };
   
   int main() {
      try {
         auto descriptor = PosixResultChecker( open( "/home/riv/tmp.txt", O_RDWR | O_NOCTTY | O_NDELAY ), "Could not open file '/home/riv/tmp.txt'" );
         PosixResultChecker( write( descriptor, "Hello world", strlen( "Hello world" ) ), "Could not write to '~/tmp.txt'");
      } catch ( std::system_error err ) {
         std::cout << err.what() << std::endl;
      }
      return 0;
   }

我真的不喜欢这种方法,但我想不出更好的方法。也许这样的问题经常遇到,并且有某种解决方案或现成的解决方案?

c++
  • 2 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2022-04-16 19:57:02 +0000 UTC

如何在编译时获取结构位域的大小?

  • 6

有一点结构。是否可以在编译时找出该结构字段的大小(以位为单位)?结构本身就在一边,您无法更改其代码。

// Код, недоступный для изменения.
#pragma pack( push, 1 )
struct Foo {
   uint16_t field_a : 12;
   uint8_t field_b : 6;
   uint8_t field_c: 8;
};
#pragma pack( pop )

// Как получить размер field_b структуры?
size_t size_of_field_b = ???; // Должны получить 6.
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2022-03-22 18:57:21 +0000 UTC

尝试在 Linux + cmake 上连接 SDL2 时出现链接器错误

  • 0

从官方网站的源代码编译和安装 SDL 2。

./configure
make
sudo make install

之后,我尝试将其包含在我的 cmake 项目中,但班轮给出了错误unrecognized option '--enable-new-dtags -lSDL2'。

cmake_minimum_required(VERSION 3.20)

project(sdl_test LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(SDL2 REQUIRED)
include_directories(${PROJECT_NAME} ${SDL2_INCLUDE_DIRS})
link_directories(${PROJECT_NAME} ${SDL2_LIBRARIES})

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

尝试使用 gcc-11 和 clang-13 构建。

Ubuntu 21.10、gcc-11、clang-13、cmake 3.20(尝试过 make 和 ninja 生成器)。

更新:之后我从存储库中额外安装了 sdl 的各个部分,它没有帮助。 sudo apt install libghc-sdl2-dev libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-mixer-2.0-0 libsdl2-mixer-dev libsdl2-net-2.0-0 libsdl2-ttf-2.0-0 libsdl2-ttf-dev

upd2 : 构建项目make VERBOSE=1

make VERBOSE=1
/usr/local/bin/cmake -S/home/riv/mainProjects/cpp_test -B/home/riv/mainProjects/cpp_test --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/bin/cmake -E cmake_progress_start /home/riv/mainProjects/cpp_test/CMakeFiles /home/riv/mainProjects/cpp_test//CMakeFiles/progress.marks
make  -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/riv/mainProjects/cpp_test'
make  -f CMakeFiles/sdl_test.dir/build.make CMakeFiles/sdl_test.dir/depend
make[2]: Entering directory '/home/riv/mainProjects/cpp_test'
cd /home/riv/mainProjects/cpp_test && /usr/local/bin/cmake -E cmake_depends "Unix Makefiles" /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test /home/riv/mainProjects/cpp_test/CMakeFiles/sdl_test.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/riv/mainProjects/cpp_test'
make  -f CMakeFiles/sdl_test.dir/build.make CMakeFiles/sdl_test.dir/build
make[2]: Entering directory '/home/riv/mainProjects/cpp_test'
[100%] Building CXX object CMakeFiles/sdl_test.dir/main.cpp.o
/usr/bin/c++  -I/home/riv/mainProjects/cpp_test/sdl_test -I/usr/local/include/SDL2 -std=gnu++17 -MD -MT CMakeFiles/sdl_test.dir/main.cpp.o -MF CMakeFiles/sdl_test.dir/main.cpp.o.d -o CMakeFiles/sdl_test.dir/main.cpp.o -c /home/riv/mainProjects/cpp_test/main.cpp
[100%] Linking CXX executable sdl_test
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/sdl_test.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/sdl_test.dir/main.cpp.o -o sdl_test   -L/home/riv/mainProjects/cpp_test/sdl_test  -L"/home/riv/mainProjects/cpp_test/-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2"  -Wl,-rpath,"/home/riv/mainProjects/cpp_test/sdl_test:/home/riv/mainProjects/cpp_test/-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2" -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2 
/usr/bin/ld: unrecognized option '--enable-new-dtags -lSDL2'
/usr/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/sdl_test.dir/build.make:97: sdl_test] Error 1
make[2]: Leaving directory '/home/riv/mainProjects/cpp_test'
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/sdl_test.dir/all] Error 2
make[1]: Leaving directory '/home/riv/mainProjects/cpp_test'
make: *** [Makefile:91: all] Error 2
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2022-03-11 21:08:03 +0000 UTC

如何为模板类的所有特化编写通用代码?

  • 0

有一个模板类template <int I> Foo和它的两个特化。我怎样才能在里面定义一些东西,Foo以便它在它的所有专业中都是可见的?例如:

template <int I>
class Foo {
 public:
   enum class Bat
   {
      One = 1,
      Two = 2
   };
};

template <>
class Foo<1> {
   void SomeFunction( Bat bat ); // Bat неопределённо. 
};

template <>
class Foo<2> {
   void SomeFunction( Bat bat );
};
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2022-09-27 18:04:55 +0000 UTC

如何从基类构造函数中获取继承者的大小或类型?

  • 1

有许多结构的构造函数获取它们的大小(通过 sizeof)并执行某些操作。在每个结构中,都必须复制和粘贴代码。这个问题的明显解决方案是创建一个基类,从中继承所有这些结构并将代码移到那里。但是如何在基类的构造函数中获取实际调用其构造函数的类型呢?

struct Base {
  public:
   Base() {
      cout << sizeof( *this ) << endl;  // Как тут понять что на самом деле это часть конструктора Foo?
   };
   uint8_t base_1 = 0;
};

struct Foo : public Base {
   uint8_t foo_1 = 0;
};

int main() {
   Foo foo; // В консоль будет выведено '1'.
   return 0;
}

如何在编译时做同样的事情?

constexpr size_t kFooExpectedSize = 2;
struct Base {
  public:
   Base() { 
      static_assert( sizeof( *this ) == kExpectedSize, "Wrong size" ); // Следующий уровень сложности =) 
   };
   uint8_t base_1 = 0;
};

struct Foo : public Base {
   uint8_t foo_1 = 0;
};

int main() {
   Foo foo;
   return 0;
}
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2022-02-01 12:32:41 +0000 UTC

如何将通用字段或方法添加到将在其专业化中可见的类模板

  • 1

有一个模板类,其中有一组字段和方法。当这个类被专门化时,对这些字段和方法的访问将丢失。我需要为所有专业创建一个通用部分,但这样创建新专业的用户就不必手动添加它。那些。我需要像继承但专业化的行为。

template <class T> class Foo {
public:
    // Обобщёная часть, которая должна быть во всех специализациях. 
    int some_field;
    void SomeMethod(int val) {
        some_field = val;
    };
};

// Но при специализации общая часть пропадает. 
template <> class Foo <std::string> {
public:
};

// При наследовании SomeMethod был бы доступен, а при специализации нет. 
template <class T>
void SomeFunction(Foo <T> val) {
    val.SomeMethod (5);
}

int main() {
    Foo<string> foo;
    SomeFunction(foo); // Соответственно внутри SomeFunction будет ошибка компиляции т.к. метода foo.SomeMethod не существует. 
    return 0;
}
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2021-12-17 20:35:21 +0000 UTC

尝试在静态链接 libstdc++ 时创建线程时出现分段错误

  • 2

构建二进制文件时需要静态链接所有库。向 cmake 添加一行后,set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")或add_link_options(-static-libgcc -static-libstdc++ -static)任何创建 std::thread 对象的尝试都会导致Segmentation fault。

操作系统:Ubuntu 20.04、Cmake v 3.19、GCC 9.3。

为了重现这个问题,我写了一个小项目。

Cmake脚本:

cmake_minimum_required(VERSION 3.5)
project(thread_test LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package (Threads)
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
add_executable(thread_test main.cpp)
target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT})

C++ 代码:

#include <chrono>
#include <iostream>
#include <thread>
using std::cout;
using std::endl;
using std::thread;
using namespace std::chrono_literals;

int main() {
    thread th([]() -> void {
        std::this_thread::sleep_for(1s);
        cout << "Some text." << endl;
    });
    th.join();
    cout << "End" << endl;
    return 0;
}

如果您注释掉该行set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static"),那么一切都会开始正常工作。

upd:我尝试手动构建这个 c++ 代码。全部都一样。g++ -static -pthread -std=c++17 -o thread_test main.cpp. 运行Segmentation fault后。那些。g++ 根本无法静态链接线程。做什么的问题仍然悬而未决。

c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2021-11-20 17:02:18 +0000 UTC

使用空初始化列表初始化的容器中的指针是否总是 == nullptr?

  • 0

使用空初始化列表初始化的容器中的指针总是 == nullptr 还是有一些陷阱?当我想检查没有任何内容写入给定单元格时(在所有三种情况下),我可以在我的代码中依赖它吗?

class Foo;
Foo* arr1[100]{};
std::shared_ptr<Foo> arr2[100]{};
std::vector<std::shared_ptr<Foo>> vec{100};
if (arr1[50] == nullptr){
...
}
if (arr2[50] == nullptr){
...
}
if (vec[50] == nullptr){
...
}
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-07-17 13:36:38 +0000 UTC

JavaScript。如何将数字值的输出与特定格式对齐?

  • 1

有一段代码可以在浏览器中显示各种数字`some text ${some_num} some text`。这个数字必须显示在 中XX.XXX。例如12.142,98.234或00.000。那些。需要从左边显示 2 个字符,从右边显示 3 个字符。如何在 JS 中做到这一点?

javascript
  • 3 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-06-09 15:01:16 +0000 UTC

布局网页时,带有开放街道地图的框架会覆盖页面的所有其他元素

  • 0

最近开始学习网络编程,现在开始使用地图。我创建了一个框架,在其中插入了开放的街道地图。我将它拉伸到全屏(我计划将半透明的 UI 放在地图的顶部),但是这个框架完全覆盖了所有其他元素。z-index无所事事地工作。我怎样才能在这个地图框的顶部显示一些东西?

html:

<body>
    <header>
        <nav class="top-nav-panel">
            <ul>
                <li>
                    <form asp-action="MainPanelWithStatus" method="get">
                        <button><b>Состояние</b></button>
                    </form>
                <li>
                    <form asp-action="MainPanelWithServerData" method="get">
                        <button><b>Данные</b></button>
                    </form>

                <li>
                    <form asp-action="BsBoard" method="get">
                        <button><b>---</b></button>
                    </form>
                <li>
                    <form asp-action="MainPanelWithEpdBoard" method="get">
                        <button><b>Устройства</b></button>
                    </form>
                <li>
                    <form asp-action="MainPanelWithMap" method="get">
                        <button><b>Карта</b></button>
                    </form>
                <li>
                    <form asp-action="MainPanelWithStatistics" method="get">
                        <button><b>Статистика</b></button>
                    </form>
                <li>
                    <form asp-action="MainPanelWithSettings" method="get">
                        <button><b>Настройки</b></button>
                    </form>
                <li>
                    <form asp-action="Index" method="get">
                        <button><b>Выйти</b></button>
                    </form>
            </ul>
        </nav>
    </header>
    <main>
        <iframe class="map-frame" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=60.608096122741706%2C56.805413212593955%2C60.64393043518067%2C56.8157850280173&amp;layer=mapnik"></iframe>
    </main>
</body>
</html>

CSS:

:root {
    text-align: center;
    font-family: 'PT Serif', serif;
}

body {
    margin: 0;
    padding: 0;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: silver;
}
/* -------------- header --------------*/
header {
    margin: 0;
    padding: 0;
    height: 0;
    z-index: 100;
}

nav.top-nav-panel {
    margin: 0;
    padding: 0;
}

    nav.top-nav-panel ul {
        list-style-type: none;
        list-style-position: inside;
        height: 4vmin;
        margin: 0;
        padding: 0;
        border: 0;
    }

        nav.top-nav-panel ul li {
            display: inline-block;
            margin: 0 0 0 -1.4vw;
            padding: 0;
            border: 0;
            height: 100%;
            width: 11.7vw;
        }

            nav.top-nav-panel ul li form {
                height: 100%;
            }

                nav.top-nav-panel ul li form button {
                    font-family: 'PT Serif', serif;
                    text-shadow: 1px 1px 4px #e1e1e1;
                    /*background-color: #4188D2;*/
                    background-image: linear-gradient(45deg, #ffffff 0%,#e1e1e1 28%,#f1f1f1 43%,#e1e1e1 64%,#e1e1e1 64%,#e1e1e1 82%,#f6f6f6 100%);
                    color: black;
                    font-weight: 800;
                    font-size: 1.0vw;
                    margin: 0 0 0.1vw 0;
                    padding: 0;
                    width: 11.7vw;
                    height: 100%;
                }

            nav.top-nav-panel ul li:first-child form button {
                border-radius: 0px 0px 0px 30px;
            }

            nav.top-nav-panel ul li:last-child form button {
                border-radius: 0px 0px 30px 0px;
            }
/* -------------- map --------------*/

iframe.map-frame {
    z-index: -1;
    width: 100%;
    height: 100%;
}
html
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-06-01 18:02:59 +0000 UTC

C# (.NET Core) 有 sigma 类型吗?需要来自 C++ 的 std::variant 的类似物

  • 0

C#( .NET Core) 有 sigma 类型吗?我对std::variant from的模拟感兴趣С++。如果没有,C#习惯上如何解决其他语言中使用 sigma 类型的问题(例如,传递和存储可以具有四种预定义用户定义类型之一的对象)?

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-10-10 02:20:33 +0000 UTC

如何在 wpf 中访问在 xaml 代码中创建的对象

  • 1

我正在使用 WPF ListView。因此,每次将新元素添加到 ListView 时,都会在其中一列中添加一个按钮,我编写了以下代码(我在代码中只留下了一个带有按钮的列,以免阻塞代码)。

<ListView Name="ListViewDictionary" Margin="10,39,92,10">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Озвучить">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Button Tag ="{Binding vocalizeButton}" Width="20" Height="20" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

按钮已成功创建。但是如何在 C# 代码中获取对它们的引用或以某种方式与它们交互呢?

UPD:只是为了澄清我对按下这些按钮的处理感兴趣。

c#
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-08-20 17:13:00 +0000 UTC

当内存在容器中实现时,已经创建的 std::string 迭代器“死”了吗?

  • 1

我从外部获取大量字符串并将它们连接到一个 std::string 中。然后我需要恢复这些行,所以在每个条目之后,我计划在条目结束的地方保存一个迭代器或索引。如果我已经存储了第 N 个迭代器并且在字符串中重新分配了内存(例如,在调用 append 方法时),这些迭代器仍然有效吗?

例如像这样:

#include <iostream>
#include <string>
#include <vector>
int main() {
  using std::cout;
  using std::endl;
  using std::string;
  using std::vector;

  string str{};
  vector<string::iterator> ends_of_notes{};

  while (true) {
    string tmp{};
    std::cin >> tmp;
    if (tmp == "exit") {
      break;
    }
    str.append(tmp);
    ends_of_notes.push_back(str.end());
  }
  cout << endl << "--------------" << endl;
  string::iterator last_it{str.begin()};
  for (auto c : ends_of_notes) {
    cout << string(last_it, c) << endl;
    last_it = c;
  }
  return 0;
}
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-08-06 21:52:58 +0000 UTC

可以给 std::atom 对象一个默认的 memory_order 吗?

  • 0

我的应用程序中有一个带有设置的模块,其中每个参数由std::atomiс. 现在我开始将每个这样的参数设置为 memory_order ,例如,而不是station_id_写入station_id_.load(std::memory_order_relaxed). 因为 代码中有很多这样的调用,代码开始非常臃肿。C++ 中是否有一些机制允许您在初始化 std::atomic 对象时设置 memory_order?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-07-16 14:37:29 +0000 UTC

如何将 std::chrono::time_point 从一种转换为另一种?

  • 6

我正在编写一个具有以下代码的跨平台应用程序:

auto last_write_file_time = std::filesystem::last_write_time(in_file_name);
time_t tt = std::chrono::system_clock::to_time_t(last_write_file_time);
tm tast_write_file_time_in_tm = *std::localtime(&tt);

在本节中,我得到了结构中文件的最后修改时间tm。

将此部分转移到另一个平台时会出现问题。该函数std::filesystem::last_write_time返回带有一些预定义参数file_time_type的别名。std::chrono::time_point但是这个参数从编译器到编译器会发生变化,因此,如果在 gcc 中我可以毫无问题地将对象last_write_file_time传递给函数,那么 MSVC 由于类型不匹配而不再编译它。std::chrono::system_clock::to_time_t有没有办法将std::chrono::time_point一种类型转换为另一种类型?(例如,从std::chrono::time_point <system_clock>do std::chrono::time_point <steady_clock>)。

c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-06-03 20:02:50 +0000 UTC

如何在一个函数调用中从 stl 容器(例如 std::list)中的容器中获取和删除元素?

  • 1

有没有办法在删除它的同时从 std::list 中提取一个元素(不分别调用两个 front 和 pop_front 方法)?如果没有这种方法或可能性,那么委员会不将这种方法添加到标准中的动机是什么?

// Например сделать так. 
auto val = list.take_front();
// Заместо 
auto val = list.front();
list.pop_front(); 
c++
  • 2 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-01-17 17:25:10 +0000 UTC

如何在 CMake 中包含 libbacktrace 库?

  • 3

我正在使用 GCC 和 CMake 在 linux 下编写一个项目。为了让 boost::stacktrace 正常工作,必须包含 libbacktrace 库。如何在 CMake 中做到这一点?

像这样尝试:

find_library (BACKTRACE_LIBRARY libbacktrace) 
target_link_libraries(${BACKTRACE_LIBRARY})

Upd:下面是我正在尝试构建项目的实际 CMake 脚本。

    cmake_minimum_required(VERSION 3.10)
project(fast_test_3)
add_definitions(-DBUILD_TYPE_="${CMAKE_BUILD_TYPE}")
add_definitions(-DPROJECT_NAME_="${PROJECT_NAME}")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_CXX_FLAGS                 "${CMAKE_CXX_FLAGS} -Wall -pthread ") #
set(CMAKE_CXX_FLAGS_DEBUG           "${CMAKE_CXX_FLAGS} -Wall -pthread -g -DDREAL_DEBUG -DDREAL_TRACE -fno-inline")
set(CMAKE_CXX_FLAGS_MINSIZEREL      "${CMAKE_CXX_FLAGS} -Wall -pthread -Os -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE         "${CMAKE_CXX_FLAGS} -Wall -pthread -O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO  "${CMAKE_CXX_FLAGS} -Wall -pthread -O2 -g")

set (Boost_USE_STATIC_LIBS ON)
set (Boost_USE_MULTITHREADED OFF)
find_package(Boost REQUIRED system)
include_directories (SYSTEM ${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARIES})

#------------ Подключение Backtrace -------------------
find_package(Backtrace REQUIRED)
include_directories(${Backtrace_INCLUDE_DIRS})
#-----------------------------------------------------


add_executable(${PROJECT_NAME} "main.cpp" "foo.h" "foo.cpp")

target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} ${Backtrace_LIBRARIES})
c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-12-26 15:24:56 +0000 UTC

尝试使用 boost::stacktrace 编译某些内容时出错

  • 0

我决定尝试 boost::stacktrace 并从 boost 文档中复制了最简单的示例。我正在使用 qt-creator 4.8、Cmake 3.10、GCC 7.3、boost 1.69.0。

编码:

#include <boost/stacktrace.hpp>
#include <iostream>

void Foo() {
    std::cout << boost::stacktrace::stacktrace() << std::flush << std::endl;
}

int main() {
    Foo();
    return 0;
}

Cmake脚本:

cmake_minimum_required(VERSION 3.10)
project(fast_test_3)
add_definitions(-DBUILD_TYPE_="${CMAKE_BUILD_TYPE}")
add_definitions(-DPROJECT_NAME_="${PROJECT_NAME}")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_CXX_FLAGS                 "${CMAKE_CXX_FLAGS} -Wall -pthread ") #
set(CMAKE_CXX_FLAGS_DEBUG           "${CMAKE_CXX_FLAGS} -Wall -pthread -g -DDREAL_DEBUG -DDREAL_TRACE -fno-inline")
set(CMAKE_CXX_FLAGS_MINSIZEREL      "${CMAKE_CXX_FLAGS} -Wall -pthread -Os -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE         "${CMAKE_CXX_FLAGS} -Wall -pthread -O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO  "${CMAKE_CXX_FLAGS} -Wall -pthread -O2 -g")

set (Boost_USE_STATIC_LIBS ON)      
set (Boost_USE_MULTITHREADED OFF)    
find_package(Boost REQUIRED system) 
include_directories (SYSTEM ${Boost_INCLUDE_DIR}) 
link_directories(${Boost_LIBRARIES}) 

add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})

在编译期间,编译器会抛出四个错误:

  • /.../main.cpp.o:-1: 在函数`boost::stacktrace::detail::to_string[abi:cxx11](boost::stacktrace::frame const*, unsigned long)'中:

  • /.../main.cpp:-1: error: undefined reference to `dladdr'

  • /.../main.cpp:-1: error: undefined reference to `dladdr'

  • :-1: 错误: collect2: 错误: ld 返回 1 退出状态

据我所知 boost::stacktrace 是一个 hederonly 库,我不知道问题是什么?

升级版:

在讨论中,出现了一个问题,这个库是 hederonly 吗?我提供了一个链接,指向文档中规定这一时刻的地方。

c++
  • 1 个回答
  • 10 Views
Martin Hope
Rivand
Asked: 2020-10-29 18:31:17 +0000 UTC

在基于范围的循环中遍历时从 std::map 中删除元素的正确性如何

  • 0

有一个 std::map 需要被绕过,如果它们的值满足某个条件,则删除一些元素。通常在基于 tange 的循环中进行遍历并直接在循环中删除元素是有效的(这对我来说完全是一个惊喜)。但是这种行为在多大程度上是正确的呢?据我所知,这样的循环只是迭代器遍历的包装。为什么删除值后迭代器不会死?

int main() {
    std::map<int, string> some_map;
    for (int i = 0; i < 10; i++) some_map.emplace(i, std::to_string(i));
    for (auto& [first, second] : some_map) if (!second.compare("6")) some_map.erase(first);
    for (auto [first, second] : some_map) std::cout << first<< " " << second << std::flush << std::endl;
    return 0;
}
c++
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5