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

C++ 表达式必须具有指针类型错误visual studio 2012,c++,visual-studio-2012,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

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

< C++ >代码>对象>成员< /> >是<>代码(*Object)的语法糖。成员< /代码>。也就是说,它在尝试访问
成员
之前取消对
对象的引用。解引用运算符
*
只能应用于指针类型

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

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

< > >代码> TyPufStrut比C++更为C。通常在C++中简单地声明为<代码>结构> /代码>。因此,
biginger
声明将变成:

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

<> > < C++ >结构> <代码>,默认情况下,所有成员都是代码>公用< /C>。代码> < <代码>不是指针。code>operator->
需要一个指针或重载它的类。我将它改为a.digits[I],现在它工作正常。太多了。请给我一个长的答案如果我已经在使用一个点,并且它说“表达式必须有指针类型”,该怎么办?我正在尝试访问结构上的一个成员,实例如下
git\u status\u list status\u list代码> > GITZATSTOSLISTRON/COD>是Stutt类型,然后访问它的表达式看起来像“代码> StasuSList.<代码>,它给出了错误。”在C++中,对象> >成员< /> >是<>代码(*Object)的语法糖。成员< /代码>。“如果<代码>对象< /C>是指针,是的;但值得注意的是,
对象
也可能是用户定义类型(例如,
)的实例,该类型重载了
运算符->()
(示例为容器迭代器、智能指针……)。同样,“解引用运算符
*
只能应用于指针类型”或重载它的类型。这一点很好-我没有想到!我将编辑答案。谢谢你的帮助。
struct BigInteger {
    char digits[MAXN];
    int lastdigit;
};