【问题标题】:Function name indentifier from another source file is undefined [duplicate]来自另一个源文件的函数名称标识符未定义[重复]
【发布时间】:2018-09-03 19:37:48
【问题描述】:

编译器发出标识符“func”未定义的错误:

我不知道为什么会出现这个错误,因为我链接了头文件,这个函数的声明。我使用 Visual Studio 2017 社区。​​p>

我的代码:

foo.h

#pragma once

class Foo {
    friend void func();
};

foo.cpp

#include "foo.h"

void func()
{
}

bar.h

#pragma once

class Bar {
    void baz();
};

bar.cpp

#include "bar.h"
#include "foo.h"

void Bar::baz()
{
    func(); // indentifier "func" is undefined
}

【问题讨论】:

  • 编辑您的问题,显示错误,更正您的拼写。错了,标题不用于链接。
  • 将声明void func(void); 添加到“foo.h”。
  • 介意显示你定义函数的位置吗?因为它不在您的问题中,因此您的错误。
  • 你的foo类需要在类前声明func。使用前向声明。
  • 这个friend void func();不是声明

标签: c++


【解决方案1】:

声明函数。

void func();

将函数声明为friend 到类不会将函数声明 到其他任何东西 - 该函数仅对类 Foo 可见。所以你实际上应该声明那个函数。

为了减少混淆:声明一个函数的存在不同于将它的 friendship 声明为一个类。

【讨论】:

  • 他们为什么,如果在foo.h func 没有声明,friendship 声明是如何被允许的?
  • @Al.G.它使其对 Foo 类可见,但不一定对其他任何东西可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2019-12-16
  • 2019-10-29
  • 1970-01-01
  • 2023-02-25
相关资源
最近更新 更多