3

我使用 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;

我该如何解决?

4

2 回答 2

5

在 C++ 中,object->member(*object).member. 也就是说,它在尝试访问之前取消引用 。解引用运算符只能应用于指针类型。objectmember*

注意这有例外 - 如果object一个类的实例重载*or ->,这些运算符将执行类中定义的功能。在这种情况下,可以将这些运算符应用于非指针对象。

通常,如果要访问结构或类的成员,请使用object.member. 如果您有指向结构或类的指针,请使用(*pointer).member或较短的pointer->member

此外,typedef structC 比 C++ 更多。struct在 C++中简单地声明更为常见。所以BigInteger声明将变为:

struct BigInteger {
    char digits[MAXN];
    int lastdigit;
};

C++ 中的Astruct只是一个public默认情况下所有成员都是的类。

于 2013-08-21T14:25:37.617 回答
2

简短的回答:

a.digits[i] = 5;
于 2013-08-21T14:16:59.443 回答