鱼C论坛

 找回密码
 立即注册
查看: 4992|回复: 30

在写一个模板函数时出现一大堆错误信息

[复制链接]
发表于 2017-5-2 21:35:35 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 943566987 于 2017-5-2 23:15 编辑

#include <stdio.h>
#include <iostream>
using namespace std;
const int N = 2;
const int MOD = 7;
const int F[3] = { 0, 1, 1 };
struct Mat
{
        int A[N][N];
        Mat()
        {
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                A[i][j] = 0;
        }
        Mat(initializer_list<int> rhs)
        {
                auto it = rhs.begin();
                for (int i = 0; it != rhs.end(); ++it, ++i)
                        A[i >> 1][i & 1] = *it;
        }
        Mat operator*(const Mat &rhs)
        {
                Mat c;
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                for (int k = 0; k < N; ++k)
                                        c.A[i][j] = (c.A[i][j] + A[i][k] * rhs.A[k][j]) % MOD;
                return c;
        }
        friend Mat operator^(Mat a, int b)
        {
                Mat r;
                for (int i = 0; i < N; ++i)
                        r.A[i][i] = 1;
                while (b)
                {
                        if (b & 1)
                                r = r * a;
                        a = a * a;
                        b >>= 1;
                }
                return r;
        }
};
int main(void)
{
        int A, B, n;
        while (~scanf("%d%d%d", &A, &B, &n) && (A || B || n))
        {
                Mat left =
                {
                        A, B,
                        1, 0
                };
                Mat right =
                {
                        F[2], 0,
                        F[1], 0
                };
                if (n <= 2)
                        printf("%d\n", F[n]);
                else
                {
                        left = left ^ (n - 2);
                        Mat resultMat = left * right;
                        printf("%d\n", resultMat.A[0][0]);
                }
        }
        return 0;
}
我是第一次接触模板,不知道哪里写错了反反复复看了好多次都没找出原因,求大牛们指教。
QQ图片20170502212817.png QQ图片20170502212848.png QQ图片20170502212907.png QQ图片20170502212926.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-2 21:55:35 | 显示全部楼层
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-2 23:18:07 | 显示全部楼层

不对啊 我代维是A[i][j]=0为什么发到论坛上就少了个[i]了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-2 23:50:37 | 显示全部楼层
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-3 10:21:21 | 显示全部楼层
我想问下 我代码那写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-3 12:39:05 | 显示全部楼层
943566987 发表于 2017-5-3 10:21
我想问下 我代码那写错了

int A[N][N];

A 是二维数组(其实是数组的数组)

你这么写,能对吗?

A[j] = 0;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-3 20:21:12 | 显示全部楼层
人造人 发表于 2017-5-3 12:39
int A[N][N];

A 是二维数组(其实是数组的数组)
#include<stdio.h>
#include<iostream>
using namespace std;

const int N= 2;
const int MOD = 7;
const int F[3] = { 0,1,1 };
struct Mat
{
        int A[N][N];
        Mat()
        {
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                A[i][j] = 0;

        }
        Mat(initializer_list<int> rhs)
        {
                auto it = rhs.begin();
                for (int i = 0; it != rhs.end(); ++it,++i)
                        A[i >> 1][i & 1] = *it;
        }
        Mat operator*(const Mat &rhs)
        {
                Mat c;
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                for (int k = 0; k < N; ++k)
                                        c.A[i][j] = (c.A[i][j] + A[i][k] * rhs.A[k][j]) % MOD;
                return c;
        }
        friend Mat operator^(Mat a, int b)
        {
                Mat r;
                for (int i = 0; i < N; ++i)
                        r.A[i][i] = 1;
                while (b)
                {
                        if (b & 1)
                                r = r*a;
                        a = a*a;
                        b >>= 1;
                }
                return r;
        }
};

int main(void)
{
        int A, B, n;
        while (~scanf("%d%d%d", &A, &B, &n) && (A || B || n))
        {
                Mat left = { A,B,1,0 };
                Mat right = { F[2],0,F[1],0 };

                if (n <= 2)
                        printf("%d\n", F[n]);
                else
                {
                        left = left ^ (n - 2);
                        Mat resultMat = left*right;
                        printf("%d\n", resultMat.A[0][0]);
                }
        }
        return 0;
}

我原来的代码是有A[i][j]=0的 .不知道为什么发到论坛上就没有【i】了,你有QQ吗,能私下个不交流吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-3 21:03:53 | 显示全部楼层
943566987 发表于 2017-5-3 20:21
我原来的代码是有A[j]=0的 .不知道为什么发到论坛上就没有【i】了,你有QQ吗,能私下个不交流吗

这个可以通过编译吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-4 20:28:32 | 显示全部楼层
人造人 发表于 2017-5-3 21:03
这个可以通过编译吧?

还是编译不了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-4 21:03:50 | 显示全部楼层

我这边可以呀
#include<stdio.h>
#include<iostream>
using namespace std;

const int N= 2;
const int MOD = 7;
const int F[3] = { 0,1,1 };
struct Mat
{
        int A[N][N];
        Mat()
        {
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                A[i][j] = 0;

        }
        Mat(initializer_list<int> rhs)
        {
                auto it = rhs.begin();
                for (int i = 0; it != rhs.end(); ++it,++i)
                        A[i >> 1][i & 1] = *it;
        }
        Mat operator*(const Mat &rhs)
        {
                Mat c;
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                for (int k = 0; k < N; ++k)
                                        c.A[i][j] = (c.A[i][j] + A[i][k] * rhs.A[k][j]) % MOD;
                return c;
        }
        friend Mat operator^(Mat a, int b)
        {
                Mat r;
                for (int i = 0; i < N; ++i)
                        r.A[i][i] = 1;
                while (b)
                {
                        if (b & 1)
                                r = r*a;
                        a = a*a;
                        b >>= 1;
                }
                return r;
        }
};

int main(void)
{
        int A, B, n;
        while (~scanf("%d%d%d", &A, &B, &n) && (A || B || n))
        {
                Mat left = { A,B,1,0 };
                Mat right = { F[2],0,F[1],0 };

                if (n <= 2)
                        printf("%d\n", F[n]);
                else
                {
                        left = left ^ (n - 2);
                        Mat resultMat = left*right;
                        printf("%d\n", resultMat.A[0][0]);
                }
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-4 21:04:14 | 显示全部楼层

截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-5 20:47:05 | 显示全部楼层

C:\Users\Administrator.857YL8PWUAVTQ4H\Desktop  [img]C:\Users\Administrator.857YL8PWUAVTQ4H\Desktop
C:\Users\Administrator.857YL8PWUAVTQ4H\Desktop[/img]
你能正常编译?你用的是那个版本的  为什么我编译的时候会出现这么多错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-5 20:47:44 | 显示全部楼层

不知道为什么图片发不出来  那错误信息跟上面一样 你看上面的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-5 20:57:25 | 显示全部楼层
943566987 发表于 2017-5-5 20:47
不知道为什么图片发不出来  那错误信息跟上面一样 你看上面的

我用vs2015
重新建立一下工程试试

上面的截图不够完整,把图截完整

无标题.png
无标题1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-6 09:46:59 | 显示全部楼层
人造人 发表于 2017-5-5 20:57
我用vs2015
重新建立一下工程试试

QQ截图20170506094038.png QQ截图20170506094128.png QQ截图20170506094327.png QQ截图20170506094349.png
你说编译的时候没有问题?  我昨晚复制你发给我的代码重新编译也是编译不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-6 09:48:38 | 显示全部楼层
人造人 发表于 2017-5-5 20:57
我用vs2015
重新建立一下工程试试

我创建的是控制台的 文件是C++你创建的也是一样的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-6 13:27:13 | 显示全部楼层
943566987 发表于 2017-5-6 09:48
我创建的是控制台的 文件是C++你创建的也是一样的吗?

“把图截完整”

指的不是这个完整

注意把第一行截上(很多时候就是前面的一些小问题,引发的几十个错误,修改前面的一个,其他全都好了)

像下面这样截图
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-5-8 22:40:54 | 显示全部楼层
人造人 发表于 2017-5-6 13:27
“把图截完整”

指的不是这个完整

微信截图_20170508223609.png 微信截图_20170508223812.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-8 23:00:40 | 显示全部楼层

c++那就不要用stdio.h了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-8 23:01:46 | 显示全部楼层

上面那一个小红下划线看到了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 04:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表