我正在学习C ++而且正在上课。
我以为我已经正确创建了所有内容,但是当我尝试清理/构建代码时出现错误:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf
rm -f -r build/Debug
rm -f dist/Debug/GNU-MacOSX/hw4
CLEAN SUCCESSFUL (total time: 57ms)
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/hw4
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/karavites_william_oct7_homework.o.d
g++ -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/karavites_william_oct7_homework.o.d -o build/Debug/GNU-MacOSX/karavites_william_oct7_homework.o karavites_william_oct7_homework.cpp
karavites_william_oct7_homework.cpp: In function 'void insertAtEnd(int)':
karavites_william_oct7_homework.cpp:85: warning: NULL used in arithmetic
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/hw4 build/Debug/GNU-MacOSX/karavites_william_oct7_homework.o build/Debug/GNU-MacOSX/main.o
Undefined symbols for architecture x86_64:
"BookList::printerr()", 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/hw4] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 469ms)
我在项目中有3个文件:
我有头文件中定义的函数和类,以及类(class.cpp)文件中的一个简单方法,它只打印出一个字符串来测试所有内容。
这是我的主文件看起来调用/创建类:
#include <cstdlib>
#include "karavites_william_oct7_homework.h"
#include <iostream>
using namespace std;
using std::cout;
using std::cin;
int ch;
/*
*
*/
int getNum(int cho) {
int ans;
switch (cho) {
case 1: cout << "Please type in the ISBN you wish to search\\insert\\delete\n";
cin >> ans;
break;
case 2: cout << "Please type in the position of the element you wish to delete/insert\n";
cin >> ans;
break;
}
return ans;
}
int main(int argc, char** argv) {
BookList bl;
bl.printerr();
return 0;
}
class1.h
/*
* File: karavites_william_oct7_homework.h
* Author: willkara
*
* Created on October 7, 2013, 9:21 PM
*/
#ifndef KARAVITES_WILLIAM_OCT7_HOMEWORK_H
#define KARAVITES_WILLIAM_OCT7_HOMEWORK_H
#include <vector>
class BookList {
public:
BookList();
void insertAtEnd(int new_element);
void insertAtLocation(int new_element, int pos);
int linSearch(int isbn);
int binSearch(int element);
void deleteByPosition(int position);
void deleteByItem(int item);
void printerr();
void print();
int menu();
int countCurrent();
void bubbleSort();
void fixNulls();
void selectionSort();
private:
static int lSize;
int bList[20];
bool sorted;
int p;
};
#endif /* KARAVITES_WILLIAM_OCT7_HOMEWORK_H */
booklist类有很多方法,但是我甚至无法得到一个打印出一行的简单方法。
#include "karavites_william_oct7_homework.h"
#include <iostream>
using namespace std;
using std::cout;
using std::cin;
int bList[20];
int lSize = 20;
bool sorted;
int c;
BookList::BookList() {
}
void printerr() {
cout << "I will hopefully work this time.\n";
}
我在某个地方错过了声明吗?我在mac OSX 10.7.5上使用NetBeans 7.3.1进行开发。
答案 0 :(得分:2)
应该是:
void BookList::printerr() {
cout << "I will hopefully work this time.\n";
}
注意BookList::
,即您忘记在实现/定义期间指定方法所属的类。因此,编译器认为这只是一个全局函数printerr
,但您在main
内将其称为类的方法,因此编译器在链接期间无法找到BookList::printerr
的实现阶段并报告错误。
关于术语的重要评论(你在评论中混合了),方法的声明是这样的:
class BookList {
...
void printerr();
...
};
即。该方法刚刚声明,未定义/实现。
方法的定义/实施是:
void BookList::printerr() {
...
}
这完全是声明和定义/实现:
class BookList {
...
void printerr() {
...
}
...
};
在这种情况下,您不需要指定BookList::
,因为编译器已经知道您在printerr
类中定义/实现了BookList
方法。