小编Din*_*gus的帖子

C++ 如何解决标题中的名称空间变得未定义的问题?

所以我目前正在为我正在进行的一个更大的项目制作一个小原型,我已经完全陷入困境。我对 C++ 比较陌生,以前从未使用过头文件或命名空间。问题是,当我尝试使用我创建的命名空间时,它完全失败并且编译器(clang)返回未定义。

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

using namespace bark;

int main() {
    bark::woof();
}
Run Code Online (Sandbox Code Playgroud)

头文件:

#pragma once
#ifndef FUNCTIONS_HPP
#define FUNCTIONS_HPP

namespace bark {
    void woof();
}

#endif
Run Code Online (Sandbox Code Playgroud)

带有函数的文件:

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

void woof() {
    std::cout << std::endl << "woof" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ namespaces header

2
推荐指数
1
解决办法
48
查看次数

C++ 线程错误:“static_assert 由于要求而失败”

我刚刚开始学习多线程编程,我正在尝试更改主函数中声明的变量。我的主要功能如下:

#include <iostream>
#include <thread>

void foo(int &args)
{
    for (int i = 0; i < 10; i++)
    {
        args = rand() % 100;
    }
}

int main()
{
    int args;
    std::thread worker(foo, args);
    for (int i = 0; i < 10; i++)
    {
        std::cout << args << std::endl;
    }
    worker.join();
}
Run Code Online (Sandbox Code Playgroud)

所以我希望 main 函数做的是将 args 作为引用并更改位于该内存地址上的值。然而 Thread 不喜欢这个想法。我通过运行这一小段代码收到的实际消息是:

/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/thread:135:2: error: static_assert failed due to requirement '__is_invocable<void (*)(int &), int>::value' "std::thread arguments must be invocable after conversion to rvalues"
        static_assert( …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

1
推荐指数
1
解决办法
8164
查看次数

C++ getnstr 导致奇怪的分段错误

所以我目前正在做一个ncurses用于输出和输入的项目。在这个程序中,用户应该能够,例如,写下他的名字。我遇到的问题是getnstr,因为它会导致一些非常奇怪且无法解释的分段错误。例如,这里的代码可以正常工作:

#include <ncurses.h>
#include <string>

int main()
{
    char *word;
    initscr();
    WINDOW *window = newwin(100, 100, 0, 0);
    nodelay(window, false);
    refresh();

    mvwgetnstr(window, 0, 0, word, 10);
    mvwprintw(window, 0, 0, "Word written is %s", word);

    wrefresh(window);
    getch();
    endwin();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我只在主函数中添加一个字符串变量,例如以这种形式:

#include <ncurses.h>
#include <string>

int main()
{
    std::string crashMe;

    char *word;
    initscr();
    WINDOW *window = newwin(100, 100, 0, 0);
    nodelay(window, false);
    refresh();

    mvwgetnstr(window, 0, 0, word, 10);
    mvwprintw(window, 0, 0, "Word written is %s", word);

    wrefresh(window);
    getch(); …
Run Code Online (Sandbox Code Playgroud)

c c++ ncurses segmentation-fault

0
推荐指数
1
解决办法
55
查看次数