【问题标题】:Debug Assertion Failed Visual C++调试断言失败 Visual C++
【发布时间】:2016-12-06 01:35:14
【问题描述】:

我对 C++ 非常陌生,我正在尝试编写一个简单的程序来询问一个人的姓名,然后将其打印回给他们。当我使用 int 类型变量执行完全相同的程序时,它运行良好。然而,当我用字符串类型替换它时,它给了我一个“调试断言失败!”输入我的名字后的消息。 这是程序:

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;
int main(string name)
{
    cout << "What is your name?" << endl;
    cin >> name;
    cout << endl << "Your name is " << name << "." << endl;
    return 0;
}

你们能指出我为什么会失败吗?我似乎无法在其他地方找到相关线程。谢谢。

【问题讨论】:

  • int main(string name) 不是有效的 C++。将其更改为 int main(int argc, char* argv[]) 并创建一个局部变量 std::string name;
  • 除了代码的实际问题之外,“Debug Assertion Failed”消息总是带有额外的信息。它可能对您没有任何意义(因为您是 C++ 新手),但它有用且重要的。请把它包括在你的问题中。请注意,您可以按 Ctrl+C 将 Windows 消息框复制到剪贴板。
  • main 没有重载以将std::string 作为一个参数。而是在 argv[1] 或 2.. 中传递您的字符串,然后将其分配给本地字符串变量或直接使用它
  • @πάνταῥεῖ 我仍然想知道为什么它是“调试断言”而不是硬链接错误......
  • @SergeyA main() 接受几乎所有参数声明而不会出现链接器错误,因为参数解释是从启动代码完成的。 main 入口点只是一个汇编符号。

标签: c++ visual-c++


【解决方案1】:

即使是C++,main的定义还是这样的:

int main(int argc, char **argv)

不是int main(string)

修复(因为name 是您程序中的输出):将name 声明为局部变量

int main(int argc, char **argv)
{
    string name;

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多