所以我目前正在为我正在进行的一个更大的项目制作一个小原型,我已经完全陷入困境。我对 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) 我刚刚开始学习多线程编程,我正在尝试更改主函数中声明的变量。我的主要功能如下:
#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) 所以我目前正在做一个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)