C++ error LINK2001 无法解析的外部符号

C++语言 码拜 9年前 (2016-04-20) 2734次浏览
错误 2 error LNK2001: 无法解析的外部符号 “char (* senc)[10]” (?senc@@3PAY09DA) D:\作业 1\My_AI0.0\My_AI0.0\main.obj My_AI0.0
错误 3 error LNK2001: 无法解析的外部符号 “char * sentform” (?sentform@@3PADA) D:\作业 1\My_AI0.0\My_AI0.0\main.obj My_AI0.0
错误 4 error LNK1120: 2 个无法解析的外部命令 D:\作业 1\My_AI0.0\Debug\My_AI0.0.exe 1 1 My_AI0.0
代码如下
word.h
#include<string>
#include<fstream>
using namespace  std;
enum nominal{ subject, be, verb, object,adv,adj};
class word{
public:
nominal nom;
string wo;
};
void check_word(string a);
void sentence(char sentform[100], char senc[][10]);
void rewrite_sentence(char sentform[100]);
void random_word(fstream f2, char x);
word.cpp
#pragma once
#include”word.h”
#include<iostream>
#include<fstream>
#include<ostream>
#include<ctime>
#include<cstdlib>
#include<string>
using namespace std;
void check_word(word &a1, string a)
{
string b;
int c;
fstream f1;
f1.open(“word.txt”);
b = f1.get();
c = f1.get();
while (b!=””&&b!=a)
{
b = f1.get();
c = f1.get();
}
if (b == a){
a1.wo = a;
switch (c){
case 0:
a1.nom = subject;
break;
case 1:
a1.nom = be;
break;
case 2:
a1.nom = verb;
break;
case 3:
a1.nom = object;
break;
case 4:
a1.nom = adj;
break;
case 5:
a1.nom = adv;
break;
default:
cout << “sorry,i can”t understand what you say” << endl;
}
}
}
void random_word(string &finded_word,char x)
{
fstream f2;
int t;
srand(time(0));
t = rand() % 10 + 1;
switch (x)
{
case “0”:
f2.open(“subject.txt”);
for (int i = 0; i <= t; i++)
finded_word=f2.get();
break;
case “1”:
f2.open(“be.txt”);
for (int i = 0; i <= t; i++)
finded_word = f2.get();
break;
case “2”:
f2.open(“verb.txt”);
for (int i = 0; i <= t; i++)
finded_word = f2.get();
break;
case “3”:
f2.open(“object.txt”);
for (int i = 0; i <= t; i++)
finded_word = f2.get();
break;
case “4”:
f2.open(“adj.txt”);
for (int i = 0; i <= t; i++)
finded_word = f2.get();
break;
case “5”:
f2.open(“adv.txt”);
for (int i = 0; i <= t; i++)
finded_word = f2.get();
break;
default:
cout << “something wrong” << endl;
break;
}
}
void sentence(char sentform[100],char senc[][10])
{
word a1;
string a = senc[0];
for (int i = 0;senc[i] != “.”; i++)
{
a = senc[i];
check_word(a1,a);
sentform[i] = a1.nom;
}
}
void rewrite_sentence(char sentform[100])
{
fstream f2;
int a = 5;
string word_out;
for (int i = 0; sentform[i]; i++)
{
random_word(word_out, sentform[i]);
cout<<word_out<<” “;
}
}
main.cpp
#pragma once
#include<iostream>
#include<string>
#include”word.h”
using namespace std;
void main(){
cout << “你的句子:” << endl;
extern char senc[10][10];
for (int i = 0; senc[i] != “.”;i++)
cin >> senc[i];
extern char sentform[100];
sentence(sentform, senc);
rewrite_sentence(sentform);
system(“pause”);
}
解决方案

80

你main.cpp里char senc[10][10];和char sentform[100];前面不要加extern,去掉就好了
PS:#pragma once一般用在头文件

#include<iostream>
#include<string>
#include"word.h"
using namespace std;
void main(){
	cout << "你的句子:" << endl;
	char senc[10][10];
	for (int i = 0; senc[i] != ".";i++)
		cin >> senc[i];
	char sentform[100];
	sentence(sentform, senc);
	rewrite_sentence(sentform);
	system("pause");
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ error LINK2001 无法解析的外部符号
喜欢 (0)
[1034331897@qq.com]
分享 (0)