从Stroustrup的C ++编译模板朋友示例时遇到问题

Notaorb

有谁知道为什么它不能编译以及如何纠正它?我正在尝试使用朋友和模板。我正在使用Stroustrup C ++ 4th Ed Page 682-683中的这段代码。

谢谢

#include <iostream>
using namespace std;

template<typename T>
class Matrix;

template<typename T>
class Vector
{
    T v[4];
public:
    friend Vector operator*<>(const Matrix<T>&, const Vector&);
};

template<typename T>
class Matrix 
{
    Vector<T> v[4];
public:
    friend Vector<T> operator*<>(const Matrix&, const Vector<T>&);
};

template<typename T>
Vector<T> operator*(const Matrix<T>& m, const Vector<T>& v)
{
    Vector<T> r;
}

int main(int argc, char *argv[])
{
}

汇编:

clang++ -std=c++11 -pedantic -Wall -g test165.cc && ./a.out
test165.cc:12:19: error: friends can only be classes or functions
    friend Vector operator*<>(const Matrix<T>&, const Vector&);
                  ^
test165.cc:12:28: error: expected ';' at end of declaration list
    friend Vector operator*<>(const Matrix<T>&, const Vector&);
                           ^
                           ;
test165.cc:19:22: error: friends can only be classes or functions
    friend Vector<T> operator*<>(const Matrix&, const Vector<T>&);
                     ^
test165.cc:19:31: error: expected ';' at end of declaration list
    friend Vector<T> operator*<>(const Matrix&, const Vector<T>&);
                              ^
songyuanyao

朋友声明引用模板的实例operator*(即operator*<T>),但是模板不存在(尚未声明),然后导致错误。

您需要提前声明操作员模板。

例如

template<typename T>
class Matrix;

template<typename T>
class Vector;

// declaration
template<typename T>
Vector<T> operator*(const Matrix<T>& m, const Vector<T>& v);

template<typename T>
class Vector
{
    T v[4];
public:
    friend Vector operator*<>(const Matrix<T>&, const Vector&);
};

template<typename T>
class Matrix 
{
    Vector<T> v[4];
public:
    friend Vector<T> operator*<>(const Matrix&, const Vector<T>&);
};

// definition
template<typename T>
Vector<T> operator*(const Matrix<T>& m, const Vector<T>& v)
{
    Vector<T> r;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编译/链接C和C ++文件时遇到问题

来自分类Dev

mobaxterm-编译C和C ++时遇到问题

来自分类Dev

在编译使用C ++映射的代码时遇到问题

来自分类Dev

编译C ++(使用GLFW)时遇到问题

来自分类Dev

C ++:使用Stroustrup示例的关于移动构造函数/赋值的问题

来自分类Dev

C ++:使用Stroustrup示例生成随机数?

来自分类Dev

C ++:根据Stroustrup的示例播种随机数

来自分类Dev

C ++:Stroustrup示例中的运算符优先级

来自分类Dev

在OpenCV中编译c ++代码时遇到问题-DisplayImage.cpp(使用gcc和CMake)

来自分类Dev

转换C ++时遇到问题

来自分类Dev

转换C ++时遇到问题

来自分类Dev

C - 调用函数时遇到问题

来自分类Dev

C ++-使用FindFirstFile的简单示例遇到问题

来自分类Dev

C ++可变参数模板参数遇到问题

来自分类Dev

在C ++中使用查找功能时遇到问题

来自分类Dev

在C ++中使用查找功能时遇到问题

来自分类Dev

在C#中使用python webservice时遇到问题

来自分类Dev

重载C ++运算符时遇到问题

来自分类Dev

在C#中创建用户控件时遇到问题

来自分类Dev

在C / UNIX中使用SIGINT信号时遇到问题

来自分类Dev

C ++在填充数组时遇到问题

来自分类Dev

安装用于C的Azure IoT SDK时遇到问题

来自分类Dev

制作子手游戏时遇到问题?(c语言)

来自分类Dev

在C ++中向下转换时遇到问题

来自分类Dev

Google图表获取this.J [a] .c时遇到问题

来自分类Dev

在C中分割字串时遇到问题

来自分类Dev

C# 使用全局变量时遇到问题

来自分类Dev

这个示例如何在Bjarne Stroustrup的C ++编程语言中工作?

来自分类Dev

C ++:局部自动变量是否已初始化?Stroustrup示例

Related 相关文章

热门标签

归档