在写一个模板函数时出现一大堆错误信息
本帖最后由 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
不对啊 我代维是A=0为什么发到论坛上就少了个了 我想问下 我代码那写错了 943566987 发表于 2017-5-3 10:21
我想问下 我代码那写错了
int A;
A 是二维数组(其实是数组的数组)
你这么写,能对吗?
A = 0; 人造人 发表于 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吗,能私下个不交流吗 943566987 发表于 2017-5-3 20:21
我原来的代码是有A=0的 .不知道为什么发到论坛上就没有【i】了,你有QQ吗,能私下个不交流吗
这个可以通过编译吧? 人造人 发表于 2017-5-3 21:03
这个可以通过编译吧?
还是编译不了啊 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;
} 943566987 发表于 2017-5-4 20:28
还是编译不了啊
截图 人造人 发表于 2017-5-4 21:04
截图
C:\Users\Administrator.857YL8PWUAVTQ4H\DesktopC:\Users\Administrator.857YL8PWUAVTQ4H\Desktop
C:\Users\Administrator.857YL8PWUAVTQ4H\Desktop
你能正常编译?你用的是那个版本的为什么我编译的时候会出现这么多错误 人造人 发表于 2017-5-4 21:04
截图
不知道为什么图片发不出来那错误信息跟上面一样 你看上面的 943566987 发表于 2017-5-5 20:47
不知道为什么图片发不出来那错误信息跟上面一样 你看上面的
我用vs2015
重新建立一下工程试试
上面的截图不够完整,把图截完整
人造人 发表于 2017-5-5 20:57
我用vs2015
重新建立一下工程试试
你说编译的时候没有问题?我昨晚复制你发给我的代码重新编译也是编译不了 人造人 发表于 2017-5-5 20:57
我用vs2015
重新建立一下工程试试
我创建的是控制台的 文件是C++你创建的也是一样的吗? 943566987 发表于 2017-5-6 09:48
我创建的是控制台的 文件是C++你创建的也是一样的吗?
“把图截完整”
指的不是这个完整
注意把第一行截上(很多时候就是前面的一些小问题,引发的几十个错误,修改前面的一个,其他全都好了)
像下面这样截图
人造人 发表于 2017-5-6 13:27
“把图截完整”
指的不是这个完整
943566987 发表于 2017-5-8 22:40
c++那就不要用stdio.h了 943566987 发表于 2017-5-8 22:40
上面那一个小红下划线看到了吧
页:
[1]
2