save file error!
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define STOP 0
#define TRUE 1
#define OK 1
#define FILE_NAME ("my.text")typedef struct List
{
long lNum;
char cpsName[30];
long lCScore;
long lMathScore;
long atol(long i);
struct List *next;
}Stu;Stu stuList[3] =
{
{1, "asd", 32, 44, 0},
{2, "ffg", 66, 66, 0},
{3, "dgd", 55, 44, 0},
};Stu *CreateList()
{
Stu *head = NULL;
Stu *NewNode = NULL;
int i = 0;for (i=0; i<3; i++) { NewNode = (Stu\*)malloc(sizeof(Stu)); NewNode->lNum = stuList\[i\].atol(stuList\[i\].lNum); strncpy(NewNode->cpsName, stuList\[i\].cpsName, 30); NewNode->lCScore = stuList\[i\].atol(stuList\[i\].lCScore); NewNode->lMathScore = stuList\[i\].atol(stuList\[i\].lMathScore); NewNode->next = NULL; if (NULL == head) { head = NewNode; } else { head->next = NewNode; head = NewNode; } } return head;
}
int SaveToFiles(Stu *head)
{
Stu *p = head;
FILE *fp;
char cFileName[1024] = {0};
//strcpy(cFileName, FILE_NAME);if ((fp = fopen(FILE\_NAME, "wb")) == NULL) { printf( "Open file error!\\n" ); exit (1); } while (p != NULL) { if (fwrite(p, sizeof(Stu), 1, fp) == 1) { p = p->next; } else { printf("Write file error!\\n"); exit(1); } } fclose(fp); printf( "Save file succeed!\\n" ); return OK;
}
int OpenFiles()
{char cFileName\[256\] = {0}; FILE \*fp; if (0 == (fp = fopen(FILE\_NAME, "r"))) { printf("Open file error!\\n"); exit(0); } fgets(cFileName, 250, fp); printf("%s", cFileName); fclose(fp); return OK;
}
int main()
{
Stu *head = NULL;head = CreateList(); SaveToFiles(head); OpenFiles(); //Print(head); return 0;
}
this is the error information: error LNK2001: unresolved external symbol "public: long __thiscall List::atol(long)" (?atol@List@@QAEJJ@Z) Debug/file.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define STOP 0
#define TRUE 1
#define OK 1
#define FILE_NAME ("my.text")typedef struct List
{
long lNum;
char cpsName[30];
long lCScore;
long lMathScore;
long atol(long i);
struct List *next;
}Stu;Stu stuList[3] =
{
{1, "asd", 32, 44, 0},
{2, "ffg", 66, 66, 0},
{3, "dgd", 55, 44, 0},
};Stu *CreateList()
{
Stu *head = NULL;
Stu *NewNode = NULL;
int i = 0;for (i=0; i<3; i++) { NewNode = (Stu\*)malloc(sizeof(Stu)); NewNode->lNum = stuList\[i\].atol(stuList\[i\].lNum); strncpy(NewNode->cpsName, stuList\[i\].cpsName, 30); NewNode->lCScore = stuList\[i\].atol(stuList\[i\].lCScore); NewNode->lMathScore = stuList\[i\].atol(stuList\[i\].lMathScore); NewNode->next = NULL; if (NULL == head) { head = NewNode; } else { head->next = NewNode; head = NewNode; } } return head;
}
int SaveToFiles(Stu *head)
{
Stu *p = head;
FILE *fp;
char cFileName[1024] = {0};
//strcpy(cFileName, FILE_NAME);if ((fp = fopen(FILE\_NAME, "wb")) == NULL) { printf( "Open file error!\\n" ); exit (1); } while (p != NULL) { if (fwrite(p, sizeof(Stu), 1, fp) == 1) { p = p->next; } else { printf("Write file error!\\n"); exit(1); } } fclose(fp); printf( "Save file succeed!\\n" ); return OK;
}
int OpenFiles()
{char cFileName\[256\] = {0}; FILE \*fp; if (0 == (fp = fopen(FILE\_NAME, "r"))) { printf("Open file error!\\n"); exit(0); } fgets(cFileName, 250, fp); printf("%s", cFileName); fclose(fp); return OK;
}
int main()
{
Stu *head = NULL;head = CreateList(); SaveToFiles(head); OpenFiles(); //Print(head); return 0;
}
this is the error information: error LNK2001: unresolved external symbol "public: long __thiscall List::atol(long)" (?atol@List@@QAEJJ@Z) Debug/file.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.
Firstly, do not repost the question, but edit the original. As to the error you get the statement
long atol(long i);
in your structure is not defined anywhere. You cannot declare a method in a structure without implementing it. You should add your ownatol()
method, or simply call the default library function. Also as I stated earlier yourCreateList()
function also has a problem.MVP 2010 - are they mad?
-
Firstly, do not repost the question, but edit the original. As to the error you get the statement
long atol(long i);
in your structure is not defined anywhere. You cannot declare a method in a structure without implementing it. You should add your ownatol()
method, or simply call the default library function. Also as I stated earlier yourCreateList()
function also has a problem.MVP 2010 - are they mad?
-
Yeah! fist, Createlist()function has a problem ?why?could you give me a detail! second, I know atol()is libiary but if I use like this it also has a problem,why? thank you for your reply!
wbgxx wrote:
I know atol()is libiary but if I use like this it also has a problem,why?
Sentences like this are rising to the top of the list of most useless statements. If your program does not work in some way, saying "it has a problem", gives us no information to guess what may be wrong. Please try and explain what happens; do you get a compiler error, does it cause an exception, does it return the wrong result, etc? However, having looked at the code again I see:
NewNode->lNum = stuList[i].atol(stuList[i].lNum);
OK, so let's correct it
NewNode->lNum = atol(stuList[i].lNum);
The
atol()
function takes astring
of digits as input and returns its value as along
variable. Your statement is trying to pass a long as its input parameter which a) is wrong, and b) makes no sense; the value is already along
. The other problem withCreatelist()
is that it returns the pointer to the last structure in your list rather than the first; you need to keep a copy of the first entry added to thehead
pointer.MVP 2010 - are they mad?
-
Yeah! fist, Createlist()function has a problem ?why?could you give me a detail! second, I know atol()is libiary but if I use like this it also has a problem,why? thank you for your reply!
(2) Simple - if atol is a library function then use it as such!! ;P declare your struct like this:
typedef struct List
{
long lNum;
char cpsName[30];
long lCScore;
long lMathScore;
struct List *next;
}Stu;And use the function like this:
NewNode->lCScore = stuList[i].atol(stuList[i].lCScore);
NewNode->lCScore = atol(stuList[i].lCScore); -
wbgxx wrote:
I know atol()is libiary but if I use like this it also has a problem,why?
Sentences like this are rising to the top of the list of most useless statements. If your program does not work in some way, saying "it has a problem", gives us no information to guess what may be wrong. Please try and explain what happens; do you get a compiler error, does it cause an exception, does it return the wrong result, etc? However, having looked at the code again I see:
NewNode->lNum = stuList[i].atol(stuList[i].lNum);
OK, so let's correct it
NewNode->lNum = atol(stuList[i].lNum);
The
atol()
function takes astring
of digits as input and returns its value as along
variable. Your statement is trying to pass a long as its input parameter which a) is wrong, and b) makes no sense; the value is already along
. The other problem withCreatelist()
is that it returns the pointer to the last structure in your list rather than the first; you need to keep a copy of the first entry added to thehead
pointer.MVP 2010 - are they mad?
-
(2) Simple - if atol is a library function then use it as such!! ;P declare your struct like this:
typedef struct List
{
long lNum;
char cpsName[30];
long lCScore;
long lMathScore;
struct List *next;
}Stu;And use the function like this:
NewNode->lCScore = stuList[i].atol(stuList[i].lCScore);
NewNode->lCScore = atol(stuList[i].lCScore); -
enhzflep wrote:
NewNode->lCScore = atol(stuList[i].lCScore);
Except that
stuList[i].lCScore
is already a long; as I pointed out in my previous message.MVP 2010 - are they mad?