我正在尝试在宏中生成包含文件名.这在C++中应该是合法的:
#define INCLUDE_FILE "module_impl_win.hpp"
#include INCLUDE_FILE
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是一旦我尝试生成文件名就很难编译
#define INCLUDE_FILE(M) M##"_impl_win.hpp"
#include INCLUDE_FILE("module")
Run Code Online (Sandbox Code Playgroud)
实际上它给了我MSVC2010的警告
警告C4067:预处理器指令后面的意外令牌 - 期望一个newlin
但它不包括该文件.
问题是什么?我怎么能摆脱它?
我my_type在命名空间中为类声明了运算符my_namespace.
namespace my_namespace {
class my_type
{
friend std::ostream& operator << (std::ostream& out, my_type t);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在实现文件中定义这些运算符,但是当我写这样的东西时
std::ostream& my_namespace::operator << (std::ostream& out, my_type t)
{
out << t;
return out;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误消息
error: ... operator should have been declared inside 'my_namespace'
当我改为
namespace my_namespace {
std::ostream& operator << (std::ostream& out, my_type t)
{
out << t;
return out;
}
}
Run Code Online (Sandbox Code Playgroud)
然后它编译,但我不明白这个问题.为什么这不能编译?那一切都是正确的吗?我很感激链接到标准,因为我真的不知道要搜索什么.
添加
file.h
#ifndef A_H
#define A_H
#include <iosfwd>
namespace N
{
class A
{ …Run Code Online (Sandbox Code Playgroud) 如何处理内联汇编器中函数的引用?我正在尝试这个
void foo(int& x)
{
__asm mov x, 10
}
int main()
{
int x = 0;
foo(x);
std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是函数执行后 x 仍然是 0,但是这个工作正常
int x = 0;
__asm mov x, 10
std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)
怎么解决呢?
谢谢。