我使用visual studio 2012,当我尝试构建这个简单的程序时,我收到此错误,我无法理解问题出在哪里。这是我的代码。
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <string>
#define MAXN 400 //max digits
using namespace std;
typedef struct {
//signbit nqma nujda v tozi slu4ai
char digits[MAXN];
int lastdigit;
} BigInteger;
BigInteger addBigIntegers(BigInteger *a, BigInteger *b, BigInteger *c)
{
c->lastdigit = max(a->lastdigit, b->lastdigit);
int carry = 0;
for(int i = 0; i<=(c->lastdigit); i++)
{
c->digits[i] = (char)(carry + a->digits[i] + b->digits[i]) % 10;
carry = (carry + a->digits[i] + b->digits[i]) / 10;
}
return *c;
}
int main()
{
BigInteger a;
BigInteger b;
string input1;
string input2;
cin >> input1 >> input2;
int len1 = input1.length();
int len2 = input2.length();
for(int i = len1-1; i>=0; i--)
{
a->digits[i] = 5;
}
}
错误在这一行:
a->digits[i] = 5;
我该如何解决?
答案 0 :(得分:4)
在C ++中,object->member
是(*object).member
的语法糖。也就是说,在尝试访问object
之前,它解除引用 member
。解除引用运算符*
只能应用于指针类型。
N.B。有一些例外 - 如果object
是一个重载*
或->
的类的实例,这些运算符将执行类中定义的函数。在这种情况下,可以将这些运算符应用于非指针对象。
通常,如果要访问结构或类的成员,请使用object.member
。如果您有指向结构或类的指针,请使用(*pointer).member
或更短的pointer->member
。
此外,typedef struct
比C ++更多C。在C ++中简单地声明为struct
更为常见。因此BigInteger
声明将成为:
struct BigInteger {
char digits[MAXN];
int lastdigit;
};
C ++中的struct
只是一个默认情况下所有成员都为public
的类。
答案 1 :(得分:2)
简短回答:
a.digits[i] = 5;