在过去的一个小时里,我一直在尝试编译这个程序,但没有成功。我不知道出了什么问题,但是,我认为构造函数有问题。整个文件太长,无法打印,所以我只打印一个片段。
字符串1.h
#ifndef STRING1_H
#define STRING1_H
#include <iostream>
using std::ostream;
using std::istream;
class String {
char *str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
String(const char *s);
String();
String(const String &); //COPY CONSTRUCTOR: PASS-BY-REF ALWAYS
~String();
int length() const {
return len;
}
String & operator=(const String &);
String & operator=(const char* );
char & operator [](int i);
const char & operator [](int i) const;
friend std::istream &operator>>(std::istream & is, String & st);
friend std::ostream &operator<<(std::ostream & os, const String & st);
static int HowMany();
};
字符串.cpp
#include "String1.h"
#include <cstring>
#include "iostream"
using namespace std;
int String::num_strings = 0;
int String::HowMany() {
return num_strings;
}
String::String(const char* s) {
len = std::strlen(s);
str = new char [len + 1];
std::strcpy(str, s);
num_strings++;
}
String::String() {
len = 4;
str = new char[1];
std::strcpy(str, "C++");
str[0] = '\0';
num_strings++;
}
String::String(const String & st) {
num_strings++;
len = st.len;
str = new char[len + 1];
std::strcpy(str, st.str);
}
String::~String() {
--num_strings;
delete [] str;
}
String & String::operator =(const String& st) {
if (this == &st)
return *this;
delete [] str;
len = st.len;
str = new char [len + 1];
std::strcpy(str, st.str);
return *this;
}
String &String::operator=(const char* s) {
delete[]str;
len = std::strlen(s);
str = new char [len + 1];
std::strcpy(str, s);
return *this;
}
char & String::operator [](int i) {
return str[i];
}
const char & String::operator [](int i) const {
return str[i];
}
ostream & operator <<(ostream& os, const String& st) {
os << st.str;
return os;
}
istream & operator >>(iostream & is, String &st) {
char temp[String::CINLIM];
is.get(temp,String::CINLIM);
if(is)
st=temp;
while(is&&is.get()!='\n')
continue;
return is;
}
主文件
#include <iostream>
#include "String1.h"
using namespace std;
const int ArSize = 10;
const int MaxLen = 81;
int main() {
String name;
cout << "Hi what is your name?\n";
cin >> name;
cout << "Please enter up to " << ArSize <<
"sayings <empty line to quit>:\n";
String sayings[ArSize];
char temp [MaxLen];
int i;
for (i = 0; i < ArSize; i++){
cout << i + 1 << ":";
cin.get(temp, MaxLen);
while (cin && cin.get() != '\n')
continue;
if (!cin || temp[0] == '\0')
break;
else
sayings[i] = temp;
}
int total = i;
}
我收到的错误消息是:
/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/string
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/main.o.d
g++ -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.cpp
mkdir -p dist/Debug/GNU-MacOSX
g++ -o dist/Debug/GNU-MacOSX/string build/Debug/GNU-MacOSX/main.o
Undefined symbols for architecture x86_64:
"String::String()", referenced from:
_main in main.o
"operator>>(std::basic_istream<char, std::char_traits<char> >&, String&)", referenced from:
_main in main.o
"String::~String()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-MacOSX/string] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
请有人让我知道这里有什么问题。如果您需要我发布整个程序,而不是片段,我很乐意这样做。