C++ 为什么叮当作响++;编译代码时发出叮当声-xc++;失败?带有std::string的ncurses

C++ 为什么叮当作响++;编译代码时发出叮当声-xc++;失败?带有std::string的ncurses,c++,clang,clang++,C++,Clang,Clang++,我有一个看起来很奇怪的问题。我的代码是: #include <string> #include <chrono> #include <thread> #include <ncurses.h> int main(int argc, char const *argv[]) { const unsigned int refresh_time_miliseconds = 500; const int exit_key1 = 'q';

我有一个看起来很奇怪的问题。我的代码是:

#include <string>
#include <chrono>
#include <thread>
#include <ncurses.h>
int main(int argc, char const *argv[])
{
    const unsigned int refresh_time_miliseconds = 500;
    const int exit_key1 = 'q';
    const int exit_key2 = 'Q';

    initscr();                     // Start curses mode
    cbreak();                      
    nodelay(stdscr, TRUE);         // getch is noblocking
    noecho();                      // don't echo keyboard input
    curs_set(0);                   // make cursor invisible
    printw("To quit hit the key '%c' or '%c'\n", exit_key1, exit_key2);
    refresh();                     // Print it on the screen

    int row, col;
    getyx(stdscr,row,col);
    int counter = 0;
    int ch = 0;
    while(ch != exit_key1 || ch != exit_key1) {
        mvprintw(row, col, "Counter: %d\n", counter++);
        std::string data = "Example";
        printw("Data vector: %s\n", data.c_str());
        refresh();
        ch = getch();
        std::this_thread::sleep_for(std::chrono::milliseconds(
        refresh_time_miliseconds));
    }

    endwin();                      // End curses mode
    return 0;   
}
我注意到,如果我注释掉对std::string的所有引用:

std::string data = "Example";
printw("Data vector: %s\n", data.c_str());
然后两个编译命令都成功了

你知道我为什么观察这种行为吗

病人:“当我这样做的时候,我的手臂会痛!”

医生:“不要那样做!”

clang是一个c编译器。它不是自动连接C++运行库(为什么会)?

CLAN+++是C++编译器。< /P> 病人:“当我这样做的时候,我的手臂会痛!”

医生:“不要那样做!”

clang是一个c编译器。它不是自动连接C++运行库(为什么会)?

CLAN+++是C++编译器。< /P>不是编译失败,而是链接。@ DavMAC:我同意,但它不是同一个链接器,对于<代码> CLAN-XC++<代码>和<代码> C++ + +代码>相同的链接器,不同的库。代码> CLAN<代码>与C++库不链接。它不是编译失败的,而是链接。@ DavMAC:我同意,但它不是同一个链接器,对于<代码> CLAN-XC++()和<代码> CLAN++<代码>?相同的链接器,不同的库。代码> CLAN<代码>与C++库没有联系。那么,代码> > XC++(代码)>开关> @ KikOS的目的是什么?问题不在编译步骤中,而是在链接器步骤中。通过执行CLAN,您已经有效地告诉链接器链接到C运行时,而不是C++运行时。结果:链接器失败。Clang的MAN页面说:> CLAN是C、C++和Objto-C编译器,包含预处理、解析、优化、代码生成、组装和链接。[.] > -X将后续输入文件视为具有类型语言。[-] > STDLIB =指定要使用的C++标准库;支持的选项是LISSTDC + +和LBC++[…]它清楚地说CLAN应该编译(和链接)C++代码。我尝试了libstdc++和libc++两个库,但都失败了。这就是为什么我问了一个问题。

-xc++
开关的目的是什么?@Koikos问题不在编译步骤,而是在链接器步骤。通过执行CLAN,您已经有效地告诉链接器链接到C运行时,而不是C++运行时。结果:链接器失败。Clang的MAN页面说:> CLAN是C、C++和Objto-C编译器,包含预处理、解析、优化、代码生成、组装和链接。[.] > -X将后续输入文件视为具有类型语言。[-] > STDLIB =指定要使用的C++标准库;支持的选项是LISSTDC + +和LBC++[…]它清楚地说CLAN应该编译(和链接)C++代码。我尝试了libstdc++和libc++两个库,但都失败了。这就是为什么我要问一个问题。
std::string data = "Example";
printw("Data vector: %s\n", data.c_str());