c++ - 类函数的多重定义错误
问题描述
我正在开发一个程序来使用堆栈和队列来测试用户输入的字符串是否是回文。这只是一个测试,以确保我的函数正确传递。我保留了这个多重定义错误。我尝试重命名我的变量和我的函数,但同样的错误不断发生。
编译器创建的 Makefile:
# Project: P5
# Makefile created by Dev-C++ 5.11
CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
OBJ = main.o Palindrome.o
LINKOBJ = main.o Palindrome.o
LIBS = -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc
INCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include"
CXXINCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++"
BIN = P5.exe
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm.exe -f
.PHONY: all all-before all-after clean clean-custom
all: all-before $(BIN) all-after
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)
main.o: main.cpp
$(CPP) -c main.cpp -o main.o $(CXXFLAGS)
Palindrome.o: Palindrome.c
$(CPP) -c Palindrome.c -o Palindrome.o $(CXXFLAGS)
错误信息:
C:\Users\me\Downloads\school\CSC\260\Palindrome.o Palindrome.c:(.text+0x0): multiple definition of `TestPal::isPalindrome(std::string)'
C:\Users\me\Downloads\school\CSC\260\main.o main.cpp:(.text+0x0): first defined here
C:\Users\me\Downloads\school\CSC\260\Palindrome.o Palindrome.c:(.text+0x2e): multiple definition of `TestPal::TestPal()'
C:\Users\me\Downloads\school\CSC\260\main.o main.cpp:(.text+0x2e): first defined here
C:\Users\me\Downloads\school\CSC\260\Palindrome.o Palindrome.c:(.text+0x2e): multiple definition of `TestPal::TestPal()'
C:\Users\me\Downloads\school\CSC\260\main.o main.cpp:(.text+0x2e): first defined here
C:\Users\me\Downloads\school\CSC\260\collect2.exe [Error] ld returned 1 exit status
25 C:\Users\me\Downloads\school\CSC\260\Makefile.win recipe for target 'P5.exe' failed
主要的:
#include <iostream>
#include "stack"
#include "queue"
#include "Palindrome.c"
using namespace std;
int main()
{
string Pal;
cout << "Enter a palindrome: ";
getline (cin, Pal);
TestPal test;
test.isPalindrome(Pal);
return 0;
}
回文.h
#ifndef PALINDROME_H
#define PALINDROME_H
#include <iostream>
#include <string>
using namespace std;
class TestPal
{
public:
bool isPalindrome(string);
TestPal();
};
#endif
回文.c
#include "Palindrome.h"
#include "stack"
#include "queue"
#include <iostream>
#include <string>
using namespace std;
bool TestPal::isPalindrome(string Pal)
{
cout << Pal;
return false;
};
TestPal::TestPal()
{
};
解决方案
问题在于,您正在导入实现,就编译而言这#include "Palindrome.c"
是一个巨大的问题。
这应该是:
#include "Palindrome.h"
除非您正在做一些非常奇怪的事情,否则永远不要包含.c
文件。只坚持.h
(或者.hpp
如果你愿意)。
推荐阅读
- azure - 在 Azure DevOps Pipeline 中使用 CSV
- javascript - 为什么 yargs.argv 导致处理函数调用
- javascript - 如果其他功能无法始终如一地工作
- javascript - 是否有任何运算符或函数来修改 mongoDB 文档中数组中元素内的属性?
- python - 执行后如何清除文本字段???KivyMD
- r - 如何计算 R 中多列中唯一值的数量?
- laravel - 在 laravel 中旋转同一张表的两个对象
- git - 使用 Emacs 编辑 git 提交消息时如何修复“未知选项'-a'”消息?
- android - 完整性检查失败:java.security.NoSuchAlgorithmException:算法 HmacPBESHA256 不可用
- doctrine-orm - 覆盖连接表上的鉴别器映射