解决在C中调用具有相同名称的函数的方法中的冲突

解决在C中调用具有相同名称的函数的方法中的冲突,第1张

概述考虑以下用于方形矩阵的(模板化)C结构的精简示例(不需要模拟问题发生): #include <array>#include <complex>using namespace std;double conj (double &x) { return x; };template <typename T, int N>struct matrix: array<T,N*N> { vo 考虑以下用于方形矩阵的(模板化)C结构的精简示例(不需要模拟问题发生):

#include <array>#include <complex>using namespace std;double conj (double &x) { return x; };template <typename T,int N>struct matrix: array<T,N*N> {    voID conj() {        for (int ij=0; ij<100; ++ij) {            T z = (*this)[ij];            (*this)[ij] = conj(z);        }    }};int main() {    matrix<double,10> a;    a.conj();    return 0;}

我想实现一个执行矩阵复共轭的方法,使用名称.conj()与<中使用的命名系统一致.复杂>图书馆.但是,我收到以下错误:

$g++ example.cpp -std=c++11example.cpp: In instantiation of ‘voID matrix<T,N>::conj() [with T = double; int N = 10]’:example.cpp:19:12:   required from hereexample.cpp:12:26: error: no matching function for call to ‘matrix<double,10>::conj(double&)’      (*this)[ij] = conj(z);                          ^example.cpp:12:26: note: candIDate is:example.cpp:9:10: note: voID matrix<T,N>::conj() [with T = double; int N = 10]     voID conj() {          ^example.cpp:9:10: note:   candIDate expects 0 arguments,1 provIDed

编译器似乎没有识别在同名方法内部调用函数conj(double&),并在结构之前定义.相反,它试图调用方法conj().

为什么编译器无法解决此命名冲突,以及保留命名的解决方案是什么?当然,如果我将方法的名称更改为与conj不同的名称,则代码将编译并正常运行.

解决方法 成员函数在更广泛的范围内隐藏同名函数.

使用限定名称:: conj来引用全局命名空间中的函数.

总结

以上是内存溢出为你收集整理的解决在C中调用具有相同名称的函数的方法中的冲突全部内容,希望文章能够帮你解决解决在C中调用具有相同名称的函数的方法中的冲突所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存