【发布时间】:2018-03-31 06:22:45
【问题描述】:
我正在尝试使用 Atmel Studio 7 为 ATxmega16E5 编写代码。 我在论坛上进行了长时间的搜索,并且无法对似乎与我自己的问题相似的其他建议做出头或尾。 (很多建议表明要更改编译选项,我不知道如何在 Atmel Studio 中执行此操作)。
基本上,我已经包含了我的课程 GPP.h 但是,当我尝试在 main.cpp 中实例化一个类时,它会作为对包括构造函数在内的所有函数的一系列未定义引用返回。
编辑:减少包含的代码量,以专注于手头的主要问题, 主要是文件似乎没有链接。
main.cpp:
//INCLUDES
#include "GPP.h"
//MAIN FUNCTION
int main()
{
GPP *gpp = new GPP();
//Turn on system power
gpp->setPowerPin();
gpp->screenOn();
// ...etc (just makes some function calls
// ...
while(1);
}
GPP.h:
#ifndef GPOWERPACK_H
#define GPOWERPACK_H
class GPP
{
public:
GPP();
//~GPP();
void setPowerPin();
void screenOn();
void SPI_Init();
void SPI_SendNext();
void displayLogo();
};
#endif
任何帮助都会帮助我加深对 cpp 的理解。 我以前用 c 和 java 编写过代码。
Atmel Makefile 很长,能否按要求显示部分?
【问题讨论】:
-
您来自 Java 还是 C# 环境?因为您尝试为不是指针的变量动态分配数据。例如
SPI_DATA_BUFFER = new LinkedList<dataBits>()。那不是现在它在 C++ 中工作。或许你应该重新开始by reading a couple of good beginner books? -
至于您的错误,它表明您实际上并没有使用
GPP.cpp构建。因为如果你这样做了,你不应该得到链接器错误,而是编译器错误(例如关于错误使用new)。 -
1) 您是否将所有目标文件链接在一起?向我们展示用于将文件编译/链接为可执行文件的命令行。 2) 那些不必要的
news 是怎么回事?你真的需要动态分配实例吗? -
感谢您的提示。我是新来的。我来自java环境。 SPI_DATA_BUFFER 完全转移了我的注意力——所以谢谢你帮我解决这个问题。真正的问题:在确定是动态分配还是(静态相反?)分配类时应该考虑什么?我也会阅读“好问题”链接,谢谢一些程序员老兄。 :) Algirdas,我正在使用 Atmel Studio 进行编译,这是问题的一部分,我不知道如何更改 Atmel 程序本身中的命令。有什么想法吗?
标签: c++ include linker-errors undefined-reference atmelstudio