【问题标题】:C++ Identifier "Environment" is undefinedC++ 标识符“环境”未定义
【发布时间】:2017-07-18 05:19:04
【问题描述】:

根据this 的帖子,我尝试在 MessageBox 中包含一个新行,如下所示:

std::wstring msg = "Text here" + Environment.NewLine + "some other text";

MessageBox(nullptr, msg.c_str(), L"Hello World!", MB_ICONINFORMATION);

但是编译器产生了错误:

E0020:标识符“环境”未定义

我尝试包含<windows.system.h>,但它什么也没做。

项目类型:C++ ATL

提前致谢。

【问题讨论】:

  • 不应该是Environment::NewLine(不知道实际的包...)
  • @user2717954 然后编译器说E0276 - name followed by '::' must be a class or namespace name。 :-(
  • 抱歉只是猜测 :) 那么环境是什么?
  • 据我所知 Environment.NewLine 来自 .net 框架,不是吗?
  • @user2717954 抱歉,我没听懂你说的。你什么意思?编译器为 Visual C++ 2017。

标签: c++ newline messagebox


【解决方案1】:

您不能在本机 C++ 应用程序中包含 Environment.NewLine,因为它是一个 .NET 结构。对于标准 C++ 中的换行符,请使用 std::endl'\n' 字符:

#include <iostream>
int main(){
    std::cout << "Hello World." << std::endl;
    std::cout << "This prints\n text on two lines.";
}

对于MessageBox WinAPI 函数中的换行符,请使用\r\n 字符。你的代码应该是:

#include <Windows.h>
#include <string>
int main(){
    std::wstring msg = L"Text here \r\n some other text";
    MessageBox(NULL, msg.c_str(), L"Hello World!", MB_ICONINFORMATION);
}

【讨论】:

  • 当我尝试使用+ "\n" + 换行时,编译器会说:E2140 - expression must have integral or unscoped enum type
【解决方案2】:

Environment.NewLine 在 C# 中使用,因为在 C++ 中的那篇文章中它是 Environment::NewLine

对于新行,您可以使用"\n"

【讨论】:

  • 但是为什么编译器会说Environment 不是类或命名空间名称?它在 C++ 中不可用吗?还是我需要添加一个using 指令,例如using namespace Environment
  • @GTAVLover 你没有正确的项目类型,要使用环境,你需要一个基于 .net 的项目,比如 CLI/CLR
  • 谢谢,那么"\n" 是在 ATL 项目中使用换行符的唯一方法吗?
  • @GTAVLover 可能有包装器,但这是最常见的方式。
  • @GTAVLover 您确实可以在 .net 上将 ALT 项目构建为 CLR 项目,但仅限于 Environment.Newline,没有任何价值。
猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
相关资源
最近更新 更多