C++ 如何访问与全局函数具有相同函数签名的类中的全局函数?

C++ 如何访问与全局函数具有相同函数签名的类中的全局函数?,c++,visual-c++,C++,Visual C++,以下是我的设想: file.h此文件包含两个带外部的函数 extern int add(int a, int b); extern int sub(int a, int b); file.cpp上述功能的实现 int add(int a, int b) { return 20; } int sun(int a, int b) { return 20; } test.h这是一个类测试,其中两个成员函数的签名与file.h中的extern add和sub相同 class tes

以下是我的设想:

file.h此文件包含两个带外部的函数

extern int add(int a, int b);
extern int sub(int a, int b);
file.cpp上述功能的实现

int add(int a, int b)
{
    return 20;
}

int sun(int a, int b)
{
    return 20;
}
test.h这是一个类测试,其中两个成员函数的签名与file.h中的extern add和sub相同

class test
{
    public:
          test();
          ~test();
    private:
         int add(int a, int b);
         int sub(int a, int b);
}
#include "file.h"
namespace file
{
     int add(int a, int b)
     {
         return 20;
     }

     int sub(int a, int b)
     {
         return 20;
     }
}
test.cpp调用测试类构造函数add函数中测试类的实现,并包含这两个文件

#include "test.h"
#include "file.h" // Contains extern methods
#include <iostream>

test::test()
{
     int addition = add(10, 10);
     printf("Addition: %d ", addition );
}

int 
test::add(int a, int b)
{
    return 10;
}

int 
test::sub(int a, int b)
{
    return 10;
}
现在我的问题是在主课上,要打印什么。是否会打印

它将输出作为 加:10
它为什么给出
10
?Is
class test
使用自己的函数
add()
sub()
。因为这两个函数都存在于
文件.h
和同一个类中。我猜它会给函数带来模糊性。是否有任何标准?如果有,请解释。和如何使用文件中的函数。在
类测试中调用
添加
类将使用
添加
成员函数

要调用全局
add
函数,请使用:


use也可以使用名称空间来完成。 在file.h中

class test
{
    public:
          test();
          ~test();
    private:
         int add(int a, int b);
         int sub(int a, int b);
}
#include "file.h"
namespace file
{
     int add(int a, int b)
     {
         return 20;
     }

     int sub(int a, int b)
     {
         return 20;
     }
}
在test.cpp中

#include "test.h"
#include "file.h" 
#include <iostream>

test::test()
{
     int addition = file::add(10, 10); // used namespace here
     printf("Addition: %d ", addition );
}

int 
test::add(int a, int b)
{
    return 10;
}

int 
test::sub(int a, int b)
{
    return 10;
}
#包括“test.h”
#包括“file.h”
#包括
test::test()
{
int addition=file::add(10,10);//此处使用了名称空间
printf(“添加:%d”,添加);
}
int
测试::添加(int a,int b)
{
返回10;
}
int
测试::sub(内部a、内部b)
{
返回10;
}

显然是编译错误,因为您试图在此处将指针类型分配给非指针类型:
test a=new test()不会打印任何内容。即使它已编译,您也不会执行任何打印任何内容的操作。只要更正,编译并执行它。编译程序并运行它很可能会提供答案。你为什么问编译器会做什么,而不是自己编译呢?如果你手头没有,就有。运行它并找出答案。谢谢!你能给我发一个链接吗?我可以从那里得到这方面的文档。@D'JayPatil抓起一个并阅读它。这种行为在C++标准中描述,但大多数凡人都不想读。@ D'JayPall找不到官方文档,而是给我的答案添加了一个SO问题的链接。右乌代