943566987 发表于 2017-5-2 21:35:35

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

本帖最后由 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 = { 0, 1, 1 };
struct Mat
{
        int A;
        Mat()
        {
                for (int i = 0; i < N; ++i)
                        for (int j = 0; j < N; ++j)
                                A = 0;
        }
        Mat(initializer_list<int> rhs)
        {
                auto it = rhs.begin();
                for (int i = 0; it != rhs.end(); ++it, ++i)
                        A = *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 = (c.A + A * rhs.A) % MOD;
                return c;
        }
        friend Mat operator^(Mat a, int b)
        {
                Mat r;
                for (int i = 0; i < N; ++i)
                        r.A = 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, 0,
                        F, 0
                };
                if (n <= 2)
                        printf("%d\n", F);
                else
                {
                        left = left ^ (n - 2);
                        Mat resultMat = left * right;
                        printf("%d\n", resultMat.A);
                }
        }
        return 0;
}
我是第一次接触模板,不知道哪里写错了反反复复看了好多次都没找出原因,求大牛们指教。

人造人 发表于 2017-5-2 21:55:35

943566987 发表于 2017-5-2 23:18:07

人造人 发表于 2017-5-2 21:55


不对啊 我代维是A=0为什么发到论坛上就少了个了

人造人 发表于 2017-5-2 23:50:37

943566987 发表于 2017-5-3 10:21:21

我想问下 我代码那写错了

人造人 发表于 2017-5-3 12:39:05

943566987 发表于 2017-5-3 10:21
我想问下 我代码那写错了

int A;

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

你这么写,能对吗?

A = 0;

943566987 发表于 2017-5-3 20:21:12

人造人 发表于 2017-5-3 12:39
int A;

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


#include<stdio.h>
#include<iostream>
using namespace std;

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

        }
        Mat(initializer_list<int> rhs)
        {
                auto it = rhs.begin();
                for (int i = 0; it != rhs.end(); ++it,++i)
                        A = *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 = (c.A + A * rhs.A) % MOD;
                return c;
        }
        friend Mat operator^(Mat a, int b)
        {
                Mat r;
                for (int i = 0; i < N; ++i)
                        r.A = 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,0,F,0 };

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

我原来的代码是有A=0的 .不知道为什么发到论坛上就没有【i】了,你有QQ吗,能私下个不交流吗

人造人 发表于 2017-5-3 21:03:53

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

这个可以通过编译吧?

943566987 发表于 2017-5-4 20:28:32

人造人 发表于 2017-5-3 21:03
这个可以通过编译吧?

还是编译不了啊

人造人 发表于 2017-5-4 21:03:50

943566987 发表于 2017-5-4 20:28
还是编译不了啊

我这边可以呀

#include<stdio.h>
#include<iostream>
using namespace std;

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

      }
      Mat(initializer_list<int> rhs)
      {
                auto it = rhs.begin();
                for (int i = 0; it != rhs.end(); ++it,++i)
                        A = *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 = (c.A + A * rhs.A) % MOD;
                return c;
      }
      friend Mat operator^(Mat a, int b)
      {
                Mat r;
                for (int i = 0; i < N; ++i)
                        r.A = 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,0,F,0 };

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

人造人 发表于 2017-5-4 21:04:14

943566987 发表于 2017-5-4 20:28
还是编译不了啊

截图

943566987 发表于 2017-5-5 20:47:05

人造人 发表于 2017-5-4 21:04
截图

C:\Users\Administrator.857YL8PWUAVTQ4H\DesktopC:\Users\Administrator.857YL8PWUAVTQ4H\Desktop
C:\Users\Administrator.857YL8PWUAVTQ4H\Desktop
你能正常编译?你用的是那个版本的为什么我编译的时候会出现这么多错误

943566987 发表于 2017-5-5 20:47:44

人造人 发表于 2017-5-4 21:04
截图

不知道为什么图片发不出来那错误信息跟上面一样 你看上面的

人造人 发表于 2017-5-5 20:57:25

943566987 发表于 2017-5-5 20:47
不知道为什么图片发不出来那错误信息跟上面一样 你看上面的

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

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


943566987 发表于 2017-5-6 09:46:59

人造人 发表于 2017-5-5 20:57
我用vs2015
重新建立一下工程试试




你说编译的时候没有问题?我昨晚复制你发给我的代码重新编译也是编译不了

943566987 发表于 2017-5-6 09:48:38

人造人 发表于 2017-5-5 20:57
我用vs2015
重新建立一下工程试试



我创建的是控制台的 文件是C++你创建的也是一样的吗?

人造人 发表于 2017-5-6 13:27:13

943566987 发表于 2017-5-6 09:48
我创建的是控制台的 文件是C++你创建的也是一样的吗?

“把图截完整”

指的不是这个完整

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

像下面这样截图

943566987 发表于 2017-5-8 22:40:54

人造人 发表于 2017-5-6 13:27
“把图截完整”

指的不是这个完整


人造人 发表于 2017-5-8 23:00:40

943566987 发表于 2017-5-8 22:40


c++那就不要用stdio.h了

人造人 发表于 2017-5-8 23:01:46

943566987 发表于 2017-5-8 22:40


上面那一个小红下划线看到了吧
页: [1] 2
查看完整版本: 在写一个模板函数时出现一大堆错误信息