小编led*_*kol的帖子

在宏中生成包含文件名

我正在尝试在宏中生成包含文件名.这在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

但它不包括该文件.

问题是什么?我怎么能摆脱它?

c++ macros include

20
推荐指数
1
解决办法
6883
查看次数

gcc failes用前缀命名空间编译运算符定义

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)

c++ gcc namespaces operator-overloading

8
推荐指数
1
解决办法
9884
查看次数

C++内联汇编:如何处理引用?

如何处理内联汇编器中函数的引用?我正在尝试这个

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)

怎么解决呢?

谢谢。

c++ assembly reference inline-assembly visual-c++

4
推荐指数
1
解决办法
1925
查看次数