表达式必须有指针类型错误visual studio 2012

时间:2013-08-21 14:13:46

标签: c++ visual-studio-2012

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

我该如何解决?

2 个答案:

答案 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;