gpt4 book ai didi

c++ - 编译器看不到函数,但可以看到以相同方式使用的所有其他函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:50 26 4
gpt4 key购买 nike

我有三个文件:matrix.cpp main.cpp matrix.hpp。在 matrix.hpp 中声明了一个函数 str_matrix(const char*),它的文本在 matrix.cpp 中。在 main.cpp 中我想使用这个函数。在 matrix.hpp 中:

class matrix {
...
friend matrix str_matrix(const char*);

在 matrix.cpp 中:

#include "matrix.hpp"
#include <iostream>
#include <cstdlib>
#include <cstdio>
...
matrix str_matrix(const char* a) {
...}

在 main.cpp 中:

#include <iostream>
#include <fstream>
#include "matrix.hpp"
#include <cstdlib>
#include <cstdio>
...
matrix m1(str_matrix ("{1}"));

但是我有一个错误:

nirvana@lpt00:~/cpp/matrix$ g++ main.cpp matrix.cpp 
main.cpp: In function ‘int main()’:
main.cpp:12:30: error: ‘str_matrix’ was not declared in this scope
matrix m1(str_matrix ("{1}"));
^

我该怎么做才能管理它?

最佳答案

我假设您遇到的问题与这个较小的示例中的问题相同:

class matrix {
public:
friend matrix str_matrix(const char*);
};

matrix m1(str_matrix ("{1}"));
// error: 'str_matrix' was not declared in this scope

这里的问题是 friend 声明不会使声明的名称可用于在封闭范围内查找。该名称仅可用于依赖于参数的查找,但是 ADL 在这里找不到函数,因为参数的类型为 char *,而不是 matrix

要解决此问题,您还需要包含一个非好友声明,例如:

matrix str_matrix(const char *);

在 header 中的类定义之后。

关于c++ - 编译器看不到函数,但可以看到以相同方式使用的所有其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36216380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com