非法调用非静态成员函数

时间:2012-08-23 11:06:56

标签: c++ function call non-static

我希望制作一个可以计算几乎任何长度的数字的计算器。

我需要的第一个函数是将字符串转换为链表然后返回指向列表头部的指针。

然而,在编译时我遇到了一个错误: 错误C2352:'main :: StringToList':非静态成员的非法调用。行:7;

我为你提供了main.cpp和main.h文件。

感谢任何

的main.cpp

#include "main.h"

int main()
{
main::node *head = main::StringToList("123");

main::node *temp = new main::node;

temp = head;
while (temp->next != NULL)
{
    cout << temp->data;
    temp = temp->next;
}

std::cout << "\nThe program has completed successfully\n\n";
system("PAUSE");
return 0;
}

main::node * StringToList(string number) 
{

int loopTimes = number.length() - 1; 
int looper = 0;         
int *i = new int;       
i = &looper;            
main::node *temp = new main::node;  
main::node *head;               
head = temp;            
for ( i = &loopTimes ; *i >= 0; *i = *i - 1) 
{
    temp->data = number[*i] - 48;   
    main::node *temp2 = new main::node;         
    temp->next = temp2;             
    temp = temp2;                   
}
temp->next = NULL;                  
return head;
}

main.h

#ifndef MAIN_H
#define MAIN_H

#include <iostream>
#include <string>

using namespace std;

class main
{
public:
typedef struct node
{
    int data;
    node *next;
};
node* StringToList (string number);
};

#endif

3 个答案:

答案 0 :(得分:2)

您需要实例化主类并将String To List调用为成员:

main* m = new main;
main::node *head = m->StringToList("123");
...
delete m;

答案 1 :(得分:1)

您必须将StringToList声明为static才能使其正常工作:

static node* StringToList(string number);

在这一行:

main::node *head = main::StringToList("123");

您试图在没有首先创建StringToList类型的对象的情况下调用main。由于它是非静态成员函数,因此不起作用。你必须这样做:

main foo;
main::node *head foo.StringToList("123");

但是对于你的用例来说,这并没有多大意义。

答案 2 :(得分:0)

由于node* StringToList (string number);不是静态的,因此您无法将其称为main::StringToList("123");

首先创建一个main对象然后像

一样调用它
main mn;
mn.StringToList("123");

否则将node* StringToList (string number);声明为static node* StringToList (string number);