[求助]在MFC中使用自定义类出错

lartely 2008-01-31 03:42:27
我写了一个自定义的信号类,有signal.h 和signal.cpp
当我把它们加到新建的MFC工程中编译提示unexpected end of file while looking for precompiled header directive
上网参考后又加了#include "stdafx.h"上面的错误没了,又多了好多新的错误。
我是个MFC的新手,各位大虾们帮帮小弟吧。
...全文
236 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lartely 2008-01-31
  • 打赏
  • 举报
回复
就是上面说的cview了。


谢谢大家啊,我找到错误了。就是没有把所有的文件(complex.cpp h & fft.cpp h ...)放到工程中。麻烦大家了,明天一定把分平均发给大家。
my_girlf 2008-01-31
  • 打赏
  • 举报
回复
这是"signal.cpp"没有被程序找到和编译造成的。把你程序的XXX.dsp用文本文件打开,发上来看看。
sjdev 2008-01-31
  • 打赏
  • 举报
回复
sigoutView.cpp和sigoutView.h是什么?
lartely 2008-01-31
  • 打赏
  • 举报
回复
cview.cpp加了#include "signal.h"
cnzdgs 2008-01-31
  • 打赏
  • 举报
回复
再Rebuild一下
cnzdgs 2008-01-31
  • 打赏
  • 举报
回复
在你要使用这个类的cpp文件中(例如cview.cpp)加上#include "signal.h" 。
lartely 2008-01-31
  • 打赏
  • 举报
回复
/*
* signal.h - signal definitions(T and F area)
*
*
*/
#ifndef _COMPLEX_DOT_H_
#include "complex.h"
#define _COMPLEX_DOT_H_
#endif
#ifndef _MATH_DOT_H_
#include <math.h>
#define _MATH_DOT_H_
#endif
#ifndef _ALLOC_DOT_H_
#include <malloc.h>
#define _ALLOC_DOT_H_
#endif
#ifndef _DFT_DOT_H_
#include "dft.h"
#define _DFT_DOT_H_
#endif
#ifndef _FFT_DOT_H_
#include "fft.h"
#define _FFT_DOT_H_
#endif
#ifndef _SIGNAL_DOT_H_
#define _SIGNAL_DOT_H_

class signal
{
private:
double *sgnt;
complex *sgnw;
int length;
public:
signal(void);
signal(int);
signal(double *,int);
void FFT(void);
void IFFT(void);
void fitForLen(int);
static signal conv(signal, signal );
signal& operator = (const signal);
signal& operator = (const double *);
signal& operator = (const complex *);
friend signal operator + (signal, signal );
friend signal operator - (signal, signal);
friend signal operator * (signal, signal);
friend signal operator ^ (signal, signal); //reload as conv
friend bool operator ==(const signal, const signal);
void print(void);
virtual ~signal();

};

#endif _SIGNALT_DOT_H_






// signal.cpp: implementation of the signal class.
//
//////////////////////////////////////////////////////////////////////

#include "signal.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
signal::signal(void){
length=1;
sgnt=(double *)malloc(sizeof(double));
sgnw=(complex *)malloc(sizeof(complex));
*sgnt=0;
FFT();
}
signal::signal(int N){
length=N;
sgnt=(double *)malloc(sizeof(double)*N);
sgnw=(complex *)malloc(sizeof(complex)*N);
int i;
for (i=0;i<N;i++){
sgnt[i]=0.0;
}
FFT();
}
signal::signal(double *xn,int N){
length=N;
sgnt=(double *)malloc(sizeof(double)*N);
sgnw=(complex *)malloc(sizeof(complex)*N);
int i;
for (i=0;i<N;i++){
sgnt[i]=xn[i];
}
FFT();
}
void signal::FFT(){
CFFT::FFT(sgnt,sgnw,length);
}
void signal::IFFT(){
CFFT::IFFT(sgnw,sgnt,length);
}
signal& signal::operator = (const signal Orign){
int i;
length=Orign.length;
for (i=0;i<Orign.length;i++){
sgnt[i]=Orign.sgnt[i];
sgnw[i]=Orign.sgnw[i];
}
return *this;
}
signal& signal::operator = (const double *Orign){
int i;
for (i=0;i<length;i++)
sgnt[i]=Orign[i];
FFT();
return *this;
}
signal& signal::operator = (const complex *Orign){
int i;
for (i=0;i<length;i++)
sgnw[i]=Orign[i];
IFFT();
return *this;
}
void signal::fitForLen(int N){
double *sgntemp;
int i,j;
sgntemp=(double *)malloc(sizeof(double)*length);
for (j=0;j<length;j++)
sgntemp[j]=sgnt[j];
i=length;
length=N;
sgnt=(double *)malloc(sizeof(double)*length);
sgnw=(complex *)malloc(sizeof(complex)*length);
for (j=0;j<i;j++){
sgnt[j]=sgntemp[j];
}
for (j=i;j<N;j++){
sgnt[j]=0.0;
}
FFT();
}
signal operator+ (signal s1,signal s2){
int length;
if (s1.length>s2.length){
length=s1.length;
s2.fitForLen(length);
}
else {
length=s2.length;
s1.fitForLen(length);
}
signal s3;
s3.length=length;
s3.sgnt=(double *)malloc(sizeof(double)*length);
s3.sgnw=(complex *)malloc(sizeof(complex)*length);
int i;
for(i=0;i<length;i++)
s3.sgnt[i]=s1.sgnt[i]+s2.sgnt[i];
s3.FFT();
return s3;
}

signal operator- (signal s1,signal s2){
int length;
if (s1.length>s2.length){
length=s1.length;
s2.fitForLen(length);
}
else {
length=s2.length;
s1.fitForLen(length);
}
signal s3;
s3.length=length;
s3.sgnt=(double *)malloc(sizeof(double)*length);
s3.sgnw=(complex *)malloc(sizeof(complex)*length);
int i;
for(i=0;i<length;i++)
s3.sgnt[i]=s1.sgnt[i]-s2.sgnt[i];
s3.FFT();
return s3;
}

signal operator* (signal s1,signal s2){
int length;
if (s1.length>s2.length){
length=s1.length;
s2.fitForLen(length);
}
else {
length=s2.length;
s1.fitForLen(length);
}
signal s3;
s3.length=length;
s3.sgnt=(double *)malloc(sizeof(double)*length);
s3.sgnw=(complex *)malloc(sizeof(complex)*length);
int i;
for(i=0;i<length;i++)
s3.sgnt[i]=s1.sgnt[i]*s2.sgnt[i];
s3.FFT();
return s3;
}

signal operator^ (signal s1,signal s2){
return signal::conv(s1,s2);
}

signal signal::conv(signal s1,signal s2){
int length;
length=s1.length+s2.length-1;
signal s3;
s3.length=length;
s3.sgnt=(double *)malloc(sizeof(double)*length);
s3.sgnw=(complex *)malloc(sizeof(complex)*length);
s1.fitForLen(length);
s2.fitForLen(length);
s1.FFT();
s2.FFT();
int i;
for (i=0;i<length;i++)
s3.sgnw[i]=s1.sgnw[i]*s2.sgnw[i];
s3.IFFT();
return s3;
}

void signal::print(void){
int i;
for (i=0;i<length;i++){
cout<<sgnt[i]<<" ";
sgnw[i].print();
}
}
bool operator==(const signal s1, const signal s2) {
int flag=1;
if (s1.length!=s2.length) flag=0;
else {
int i,length;
length=s1.length;
i=0;
while (i<length){
if (fabs(s1.sgnt[i]-s2.sgnt[i])>0.00000001){
flag=0;
break;
}
i++;
}

}
if (flag) return true;
else return false;
}
signal::~signal(){
}


/*debug
void main(){
double a[4]={1.0,2.0,3.0,4.0},b[8]={1.0,2.0,3.0,4.0};
signal A(4),B(8);
A=a;
B=b;
A.fitForLen(8);
A.print();
B.print();
cout<<" "<<endl;
if (A==B) cout<<"A=B"<<endl;
signal C(15);
C=A^B;
C.print();
cout<<"OK"<<endl;
}
//debug*/
shakaqrj 2008-01-31
  • 打赏
  • 举报
回复
看看呢
代码
lartely 2008-01-31
  • 打赏
  • 举报
回复
都定义了,也加到工程中了啊。
zhoujianhei 2008-01-31
  • 打赏
  • 举报
回复
将 signal.h 和signal.cpp 文件添加到工程中。
sjdev 2008-01-31
  • 打赏
  • 举报
回复
1.构造函数没有或找不到定义.
2.析构函数没有或找不到定义
lartely 2008-01-31
  • 打赏
  • 举报
回复
不好意思,没说明白,就是在cview.cpp中使用signal sg;的时候显示sigoutView.obj : error LNK2001: unresolved external symbol "public: __thiscall signal::signal(void)" (??0signal@@QAE@XZ)
sigoutView.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall signal::~signal(void)" (??1signal@@UAE@XZ)
youyifang 2008-01-31
  • 打赏
  • 举报
回复
新错误是什么,?你不说的话,我们怎么知道你的错误是什么了,而且你的那个错误你自己已经解决了,新的错误是由其他原因引起的。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧