0

(初学者)我的main.cpp在编译时给我带来了麻烦,这就是我所拥有的:

#include <iostream>
#include <fstream>
#include "Test.h"

int main(){

bool add, sub, transp, mult, multScal;

//Checks each operation at once, some should fail each time depending on contents of C.txt
add=TestAdd();

sub=TestSubtr();

transp=TestTranspose();

mult=TestMultMatrices();

multScal=TestMultByScalar();

cout <<"Add success: " <<add <<'\n' <<"Subtract success: " <<sub <<'\n' 
<<"Transpose success: " <<transp <<'\n' <<"Multiplying 2 matrices success: " 
<<mult <<'\n' <<"Multiplying by Scalar success: " <<multScal <<"\nThanks for playing!";
}

其中TestAdd()TestSubtr()等都可以在Test.h中找到。不过,我得到了一个错误,说它们对于 main.cpp 是未定义的。关于为什么的任何线索?

编辑:这是我的Test.h:

#include <iostream>
#include "Matrix.h"
class Test{
public:
    bool TestAdd();
    bool TestSubtr();
    bool TestTranspose();
    bool TestMultMatrices();
    bool TestMultByScalar(); 


private:
    Matrix loadMatrix(std::string filename);
    bool compare(Matrix A, Matrix B);
};
4

3 回答 3

2

尝试将那些简单的函数定义放在 Test.h 中:

bool TestAdd() {return true;}
bool TestSubtr() {return true;}
bool TestTranspose() {return true;}
bool TestMultMatrices() {return true;}
bool TestMultByScalar() {return true;}

还要确保 Test.h 与 main.cpp 位于同一文件夹中。它应该编译没有错误。

编辑:

您面临的问题是,所有测试函数都是 Test 类的成员,如果不创建 Test 类的实例就不能直接调用。您可以在 main() 中创建这样的实例:

Test myTest;

之后,您可以在 main() 中像这样调用您的成员函数:

add = myTest.TestAdd();

此外,目前您的函数仅在 Test.h 中声明,但它们没有内容。函数内容放在括号 { } 内。通常,您在 .h 文件中声明函数并将函数内容放入 .cpp 文件中。但是,这不是强制性的,您可以将内容放在 .h 文件中。

要编译您的代码,请将您的函数声明替换为完整的函数:

bool TestAdd();

变成:

bool TestAdd(){return true;}

希望这可以帮助

于 2013-09-20T03:04:01.757 回答
0

我认为这是一个链接器错误。对于您的每个班级,您应该将它们添加为来源。

如果您使用的是 gnu 编译器,这里有一个适合您的 makefile:

CC=g++
CFLAGS=-c -Wall -pedantic
LDFLAGS=
SOURCES=main.cpp test.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=programname

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -rf *o programname
于 2013-09-20T04:02:03.160 回答
0

有一个主要的喜欢,

   int main(){

       bool add, sub, transp, mult, multScal;

       Test ObjTest;// Object for Test class created
       //Checks each operation at once, some should fail each time depending on contents of C.txt
       add=objTest.TestAdd(); //Accessing the member function using Object

       sub=objTest.TestSubtr();

       transp=objTest.TestTranspose();

       mult=objTest.TestMultMatrices();

       multScal=objTest.TestMultByScalar();

       cout <<"Add success: " <<add <<'\n' <<"Subtract success: " <<sub <<'\n' 
       <<"Transpose success: " <<transp <<'\n' <<"Multiplying 2 matrices success: " 
       <<mult <<'\n' <<"Multiplying by Scalar success: " <<multScal <<"\nThanks for laying!";
   }

解决方案是您必须创建一个 Test 类的对象才能访问成员函数。

希望这可以帮助。

于 2013-09-20T04:37:50.387 回答